In this notebook, we'll look into modelling implied trading within an exchange. Implied trading refers to ability to connect liquidity on strategy and outright order books (e.g. Euronext).

1 Type definitions and printers

1.1 Model type definitions

Our first goal is to setup the various type definitions that we'll use later on.

In [1]:
type side = BUY | SELL

type outright_id = OUT1 | OUT2 | OUT3
type strategy_id = STRAT1 | STRAT2
type month = Mar | Jun | Sep | Dec

(* Map an outright with an expiry *)
let contract_expiry = function
  | OUT1 -> Mar
  | OUT2 -> Jun
  | OUT3 -> Sep

(* Convert month to an integer *)
let month_to_int = function
  | Mar -> 3
  | Jun -> 6
  | Sep -> 9
  | Dec -> 12
;;

(* Return true of m1 is nearer (or equal) to m2 *)
let month_comp (m1 : month) (m2 : month) =
  (month_to_int m1) < (month_to_int  m2)
;;

type instrument =
  | Strategy of strategy_id
  | Outright of outright_id

(* Level information *)
type level_info = {
  li_qty : int
  ; li_price : int
}

(* best bid and ask information *)
type best_bid_ask = {
  bid_info : level_info option
  ; ask_info : level_info option
}

(* Best bid/ask for all of the books *)
type books_info = {
  book1 : best_bid_ask
  ; book2 : best_bid_ask
  ; book3 : best_bid_ask
}

(* Order type *)
type order = {
  o_qty : int
  ; o_price : int
  ; o_time : int
  ; o_id : int
  ; o_side : side
  ; o_client_id : int
  ; o_inst : instrument
  ; o_is_implied : bool
}

(* Helper function to make order creation simpler *)
let make si qty price id inst clientid isimp time =
  {o_qty = qty ; o_price = price; o_id = id; o_side = si;
   o_client_id = clientid; o_inst = inst; o_is_implied = isimp;
   o_time = time }


(* outright order book *)
type book = {
  b_buys : order list
  ; b_sells : order list
}

let empty_book = { b_buys = []; b_sells = [] }

(* Individual leg *)
type leg = {
  leg_sec_idx : outright_id
  ; leg_mult : int
}

(* Strategy is composed of legs *)
type strategy = {
  time_created : int
  ; leg1 : leg
  ; leg2 : leg
  ; leg3 : leg
}

(* Helper function to make strategy creation smaller *)
let make_strat tcreated m1 m2 m3 = {
  time_created = tcreated
  ; leg1 = { leg_sec_idx = OUT1; leg_mult = m1 }
  ; leg2 = { leg_sec_idx = OUT2; leg_mult = m2 }
  ; leg3 = { leg_sec_idx = OUT3; leg_mult = m3 }
}

type implied_strat_ord = {
  max_strat : int option
  ; strat_price : int option
}

(* New order message *)
type new_ord_msg = {
  no_client_id : int
  ; no_inst_type : instrument
  ; no_qty : int
  ; no_side : side
  ; no_price : int
}

(* cancel order ID *)
type cancel_ord_msg = {
  co_client_id : int
  ; co_order_id : int
  ; co_instrument : instrument
  ; co_side : side
}

(* Inbound messages type *)
type inbound_msg =
  | NewOrder of new_ord_msg
  | CancelOrder of cancel_ord_msg
  | ImpliedUncross

(* Helper function for creating new order messages *)
let make_no_msg cid inst qty sd p =
 NewOrder {
  no_client_id = cid
  ; no_inst_type = inst
  ; no_qty = qty
  ; no_side = sd
  ; no_price = p
 }

(* ack message *)
type ack_msg = {
  ack_client_id : int
  ; ack_order_id : int
  ; ack_inst_type : instrument
  ; ack_qty : int
  ; ack_side : side
  ; ack_price : int
}

(* fill information *)
type fill = {
  fill_client_id : int
  ; fill_qty : int
  ; fill_price : int
  ; fill_order_id : int
  ; fill_order_done : bool
}

(* uncross result *)
type uncross_res = {
  uncrossed_book : book
  ; uncrossed_fills : fill list
  ; uncrossed_qty : int
}

(* outbound message type *)
type outbound_msg =
  | Ack of ack_msg
  | Fill of fill
  | UncrossResult of uncross_res
;;

(* The entire market - strategy definitions, order books, messages, etc. s*)
type market = {

  (* current time*)
  curr_time : int

  (* used for order ID counter *)
  ; last_ord_id : int

  (* two strategy definitions *)
  ; strat1    : strategy
  ; strat2    : strategy

  (* outright books *)
  ; out_book1 : book
  ; out_book2 : book
  ; out_book3 : book

  (* strategy books *)
  ; s_book1   : book
  ; s_book2   : book

  (* inbound and outbound message queues *)
  ; inbound_msgs  : inbound_msg list
  ; outbound_msgs : outbound_msg list

}
Out[1]:
type side = BUY | SELL
type outright_id = OUT1 | OUT2 | OUT3
type strategy_id = STRAT1 | STRAT2
type month = Mar | Jun | Sep | Dec
val contract_expiry : outright_id -> month = <fun>
val month_to_int : month -> Z.t = <fun>
val month_comp : month -> month -> bool = <fun>
type instrument = Strategy of strategy_id | Outright of outright_id
type level_info = { li_qty : Z.t; li_price : Z.t; }
type best_bid_ask = {
  bid_info : level_info option;
  ask_info : level_info option;
}
type books_info = {
  book1 : best_bid_ask;
  book2 : best_bid_ask;
  book3 : best_bid_ask;
}
type order = {
  o_qty : Z.t;
  o_price : Z.t;
  o_time : Z.t;
  o_id : Z.t;
  o_side : side;
  o_client_id : Z.t;
  o_inst : instrument;
  o_is_implied : bool;
}
val make :
  side -> Z.t -> Z.t -> Z.t -> instrument -> Z.t -> bool -> Z.t -> order =
  <fun>
type book = { b_buys : order list; b_sells : order list; }
val empty_book : book = {b_buys = []; b_sells = []}
type leg = { leg_sec_idx : outright_id; leg_mult : Z.t; }
type strategy = { time_created : Z.t; leg1 : leg; leg2 : leg; leg3 : leg; }
val make_strat : Z.t -> Z.t -> Z.t -> Z.t -> strategy = <fun>
type implied_strat_ord = {
  max_strat : Z.t option;
  strat_price : Z.t option;
}
type new_ord_msg = {
  no_client_id : Z.t;
  no_inst_type : instrument;
  no_qty : Z.t;
  no_side : side;
  no_price : Z.t;
}
type cancel_ord_msg = {
  co_client_id : Z.t;
  co_order_id : Z.t;
  co_instrument : instrument;
  co_side : side;
}
type inbound_msg =
    NewOrder of new_ord_msg
  | CancelOrder of cancel_ord_msg
  | ImpliedUncross
val make_no_msg : Z.t -> instrument -> Z.t -> side -> Z.t -> inbound_msg =
  <fun>
type ack_msg = {
  ack_client_id : Z.t;
  ack_order_id : Z.t;
  ack_inst_type : instrument;
  ack_qty : Z.t;
  ack_side : side;
  ack_price : Z.t;
}
type fill = {
  fill_client_id : Z.t;
  fill_qty : Z.t;
  fill_price : Z.t;
  fill_order_id : Z.t;
  fill_order_done : bool;
}
type uncross_res = {
  uncrossed_book : book;
  uncrossed_fills : fill list;
  uncrossed_qty : Z.t;
}
type outbound_msg =
    Ack of ack_msg
  | Fill of fill
  | UncrossResult of uncross_res
type market = {
  curr_time : Z.t;
  last_ord_id : Z.t;
  strat1 : strategy;
  strat2 : strategy;
  out_book1 : book;
  out_book2 : book;
  out_book3 : book;
  s_book1 : book;
  s_book2 : book;
  inbound_msgs : inbound_msg list;
  outbound_msgs : outbound_msg list;
}

1.2 Custom type printers

One of Imandra's powerful features is the ability to combine logic (pure subset of OCaml) and program (all of OCaml) modes. In the following cell, we will create and install a custom type printer (HTML) for an order book. So that next time a value of this type is computed within a cell, this printer would be used instead of the generic one.

In [2]:
(* Here's an example of a custom printer that we can install for arbitrary data types. *)

#program;;
#require "tyxml";;
let html_of_order (o : order) =
  let module H = Tyxml.Html in
  H.div
  ~a:(if o.o_is_implied then [H.a_style "color: red"] else [])
  [ H.div
    ~a:[H.a_style "font-size: 1.4em"]
    [H.txt (Format.asprintf "%s (%s)" (Z.to_string o.o_price) (Z.to_string o.o_qty))]
  ; H.div (if o.o_is_implied then [H.txt "Implied"] else [])
  ]

let html elt =
  let module H = Tyxml.Html in
  Document.html (Document.Unsafe_.html_of_string @@ CCFormat.sprintf "%a" (H.pp_elt ()) elt);;

let doc_of_order (o:order) =
  let module H = Tyxml.Html in
  html (H.div [html_of_order o]);;

#install_doc doc_of_order;;

let html_of_book ?(title="") (b: book) =
  let module H = Tyxml.Html in
  let rec build_rows acc buys sells =
      match buys, sells with
      | b :: bs, s :: ss -> build_rows (acc @ [H.tr [H.td [html_of_order b]; H.td [html_of_order s]]]) bs ss
      | b :: bs, [] -> build_rows (acc @ [H.tr [H.td [html_of_order b]; H.td [H.txt "-"]]]) bs []
      | [], s :: ss -> build_rows (acc @ [H.tr [H.td [H.txt "-"]; H.td [html_of_order s]]]) [] ss
      | [], [] -> acc
  in
  H.div
  ~a:[H.a_style "margin-right:1em; display: flex; flex-direction: column; align-items: center; justify-content: flex-start"]
  [ H.div ~a:[H.a_style "font-weight: bold"] [H.txt title]
  ; H.table
    ~thead:(H.thead [H.tr [H.th [H.txt "Buys"]; H.th [H.txt "Sells"]]])
    (build_rows [] b.b_buys b.b_sells)]

let doc_of_book (b:book) =
  let module H = Tyxml.Html in
  html (H.div [html_of_book ~title:"M1 Mar21" b]);;

#install_doc doc_of_book;;

let html_of_market (m: market) =
  let module H = Tyxml.Html in
  H.div
  [ H.div ~a:[H.a_style "display: flex"]
    [ html_of_book ~title:"Strategy 1" m.s_book1
    ; html_of_book ~title:"Strategy 2" m.s_book2
    ]
  ; H.div ~a:[H.a_style "margin-top: 1em; display: flex"]
    [ html_of_book ~title:"Book 1" m.out_book1
    ; html_of_book ~title:"Book 2" m.out_book2
    ; html_of_book ~title:"Book 3" m.out_book3
    ]]

let doc_of_market (m : market) =
  html (html_of_market m);;

#install_doc doc_of_market;;

#logic;;
Out[2]:
/usr/local/var/imandra-dev/_opam/lib/re: added to search path
/usr/local/var/imandra-dev/_opam/lib/re/re.cma: loaded
/usr/local/var/imandra-dev/_opam/lib/uchar: added to search path
/usr/local/var/imandra-dev/_opam/lib/uutf: added to search path
/usr/local/var/imandra-dev/_opam/lib/uutf/uutf.cma: loaded
/usr/local/var/imandra-dev/_opam/lib/tyxml/functor: added to search path
/usr/local/var/imandra-dev/_opam/lib/tyxml/functor/tyxml_f.cma: loaded
/usr/local/var/imandra-dev/_opam/lib/tyxml: added to search path
/usr/local/var/imandra-dev/_opam/lib/tyxml/tyxml.cma: loaded
- : unit = ()
val html_of_order : order -> [> Html_types.div ] Tyxml_html.elt = <fun>
val html : 'a Tyxml_html.elt -> Document.t = <fun>
val doc_of_order : order -> Document.t = <fun>
val html_of_book :
  ?title:string -> book -> [> Html_types.div ] Tyxml_html.elt = <fun>
val doc_of_book : book -> Document.t = <fun>
val html_of_market : market -> [> Html_types.div ] Tyxml_html.elt = <fun>
val doc_of_market : market -> Document.t = <fun>

1.3 Custom type printer example

In [3]:
let leg = { leg_sec_idx = OUT1; leg_mult = 1 } in

let strat = { time_created = 0; leg1 = leg; leg2 = leg; leg3 = leg } in

let b1 = {
  b_buys = [
    (make BUY 100 54 1 (Outright OUT1) 1 true 1)
    ;(make BUY 100 54 2 (Outright OUT1) 1 false 1)
  ]
  ; b_sells = [
    (make SELL 100 54 3 (Outright OUT1) 1 false 1)
    ;(make SELL 100 54 4 (Outright OUT1) 1 false 1)
  ] } in

  { curr_time = 1
  ; last_ord_id = 1
  ; strat1 = strat
  ; strat2 = strat
  ; out_book1 = b1
  ; out_book2 = b1
  ; out_book3 = b1
  ; s_book1 = b1
  ; s_book2 = b1
  ; inbound_msgs = []
  ; outbound_msgs = []
  }
Out[3]:
- : market = <document>
Strategy 1
BuysSells
54 (100)
Implied
54 (100)
54 (100)
54 (100)
Strategy 2
BuysSells
54 (100)
Implied
54 (100)
54 (100)
54 (100)
Book 1
BuysSells
54 (100)
Implied
54 (100)
54 (100)
54 (100)
Book 2
BuysSells
54 (100)
Implied
54 (100)
54 (100)
54 (100)
Book 3
BuysSells
54 (100)
Implied
54 (100)
54 (100)
54 (100)

2. Outright uncrossing logic

2.1 Order book operatons (inserting, cancelling orders)

In [4]:
(* Convert fills into outbound messages *)
let rec create_fill_msgs (f : fill list) =
  match f with
  | [] -> []
  | x::xs -> (Fill x) :: create_fill_msgs xs

(* TODO: recode this with higher-order functions *)
let rec cancel_ord_side (orders : order list) (c : cancel_ord_msg) =
  match orders with
  | [] -> []
  | x::xs ->
    begin
      if (x.o_client_id = c.co_client_id) && (x.o_id = c.co_order_id) then xs
      else x :: (cancel_ord_side xs c)
    end

(* Helper to cancel orders *)
let cancel_ord_book (co : cancel_ord_msg) (b : book) =
  match co.co_side with
  | BUY -> { b with b_buys = (cancel_ord_side b.b_buys co) }
  | SELL -> { b with b_sells = (cancel_ord_side b.b_sells co) }

(* function used insert individual orders *)
let rec insert_order_side (orders : order list) (o : order) =
  match orders with
  | [] -> [ o ]
  | x::xs ->
    begin
      if o.o_side = BUY then
        (if o.o_price > x.o_price then o :: orders else x :: (insert_order_side xs o))
      else
        (if o.o_price < x.o_price then o :: orders else x :: (insert_order_side xs o))
    end

(* insert order into the book *)
let insert_order (o : order) (b : book) =
  if o.o_side = BUY then
    { b with b_buys = (insert_order_side b.b_buys o) }
  else
    { b with b_sells = (insert_order_side b.b_sells o) }

(* The fills are adjusted to a single fill price during the uncross *)
let rec adjust_fill_prices (fills : fill list) ( f_price : int ) =
  match fills with
  | [] -> []
  | x::xs -> { x with fill_price = f_price } :: ( adjust_fill_prices xs f_price )
;;
Out[4]:
val create_fill_msgs : fill list -> outbound_msg list = <fun>
val cancel_ord_side : order list -> cancel_ord_msg -> order list = <fun>
val cancel_ord_book : cancel_ord_msg -> book -> book = <fun>
val insert_order_side : order list -> order -> order list = <fun>
val insert_order : order -> book -> book = <fun>
val adjust_fill_prices : fill list -> Z.t -> fill list = <fun>
termination proof

Termination proof

call `create_fill_msgs (List.tl f)` from `create_fill_msgs f`
original:create_fill_msgs f
sub:create_fill_msgs (List.tl f)
original ordinal:Ordinal.Int (_cnt f)
sub ordinal:Ordinal.Int (_cnt (List.tl f))
path:[f <> []]
proof:
detailed proof
ground_instances:3
definitions:0
inductions:0
search_time:
0.032s
details:
Expand
smt_stats:
num checks:8
arith-assume-eqs:3
arith-make-feasible:30
arith-max-columns:37
arith-conflicts:2
rlimit count:3070
mk clause:61
datatype occurs check:25
mk bool var:128
arith-lower:19
datatype splits:3
decisions:32
propagations:41
interface eqs:3
arith-max-rows:12
conflicts:10
datatype accessor ax:10
datatype constructor ax:11
num allocs:690072
final checks:9
added eqs:85
del clause:31
arith eq adapter:17
arith-upper:24
memory:5.190000
max memory:5.190000
Expand
  • start[0.032s]
      let (_x_0 : int) = count.list count.fill f in
      let (_x_1 : fill list) = List.tl f in
      let (_x_2 : int) = count.list count.fill _x_1 in
      f <> [] && _x_0 >= 0 && _x_2 >= 0
      ==> not (_x_1 <> [])
          || Ordinal.( << ) (Ordinal.Int _x_2) (Ordinal.Int _x_0)
  • simplify
    into:
    let (_x_0 : fill list) = List.tl f in
    let (_x_1 : int) = count.list count.fill _x_0 in
    let (_x_2 : int) = count.list count.fill f in
    (not (_x_0 <> []) || Ordinal.( << ) (Ordinal.Int _x_1) (Ordinal.Int _x_2))
    || not ((f <> [] && _x_2 >= 0) && _x_1 >= 0)
    expansions:
    []
    rewrite_steps:
      forward_chaining:
      • unroll
        expr:
        (|Ordinal.<<_129/client|
          (|Ordinal.Int_114/client|
            (|`count.list { Resolved_term.spec_idx = 0;…
        expansions:
        • unroll
          expr:
          (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: fill -> int) count.fill); spe…
          expansions:
          • unroll
            expr:
            (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: fill -> int) count.fill); spe…
            expansions:
            • Unsat
            termination proof

            Termination proof

            call `cancel_ord_side (List.tl orders) c` from `cancel_ord_side orders c`
            original:cancel_ord_side orders c
            sub:cancel_ord_side (List.tl orders) c
            original ordinal:Ordinal.Int (_cnt orders)
            sub ordinal:Ordinal.Int (_cnt (List.tl orders))
            path:[let (_x_0 : order) = List.hd orders in not (_x_0.o_client_id = c.co_client_id && _x_0.o_id = c.co_order_id) && orders <> []]
            proof:
            detailed proof
            ground_instances:3
            definitions:0
            inductions:0
            search_time:
            0.035s
            details:
            Expand
            smt_stats:
            num checks:8
            arith-assume-eqs:2
            arith-make-feasible:32
            arith-max-columns:41
            arith-conflicts:2
            rlimit count:7718
            mk clause:64
            datatype occurs check:28
            mk bool var:288
            arith-lower:17
            datatype splits:51
            decisions:69
            propagations:38
            interface eqs:2
            arith-max-rows:14
            conflicts:10
            datatype accessor ax:36
            datatype constructor ax:86
            num allocs:3233156
            final checks:8
            added eqs:354
            del clause:28
            arith eq adapter:17
            arith-upper:27
            memory:5.400000
            max memory:7.950000
            Expand
            • start[0.035s]
                let (_x_0 : order) = List.hd orders in
                let (_x_1 : int) = c.co_client_id in
                let (_x_2 : int) = c.co_order_id in
                let (_x_3 : int) = count.list count.order orders in
                let (_x_4 : order list) = List.tl orders in
                let (_x_5 : int) = count.list count.order _x_4 in
                let (_x_6 : order) = List.hd _x_4 in
                not (_x_0.o_client_id = _x_1 && _x_0.o_id = _x_2)
                && orders <> [] && _x_3 >= 0 && _x_5 >= 0
                ==> not (not (_x_6.o_client_id = _x_1 && _x_6.o_id = _x_2) && _x_4 <> [])
                    || Ordinal.( << ) (Ordinal.Int _x_5) (Ordinal.Int _x_3)
            • simplify
              into:
              let (_x_0 : order list) = List.tl orders in
              let (_x_1 : order) = List.hd _x_0 in
              let (_x_2 : int) = c.co_client_id in
              let (_x_3 : int) = c.co_order_id in
              let (_x_4 : int) = count.list count.order _x_0 in
              let (_x_5 : int) = count.list count.order orders in
              let (_x_6 : order) = List.hd orders in
              (not (not (_x_1.o_client_id = _x_2 && _x_1.o_id = _x_3) && _x_0 <> [])
               || Ordinal.( << ) (Ordinal.Int _x_4) (Ordinal.Int _x_5))
              || not
                 (((not (_x_6.o_client_id = _x_2 && _x_6.o_id = _x_3) && orders <> [])
                   && _x_5 >= 0)
                  && _x_4 >= 0)
              expansions:
              []
              rewrite_steps:
                forward_chaining:
                • unroll
                  expr:
                  (|Ordinal.<<_129/client|
                    (|Ordinal.Int_114/client|
                      (|`count.list { Resolved_term.spec_idx = 0;…
                  expansions:
                  • unroll
                    expr:
                    (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: order -> int) count.order); s…
                    expansions:
                    • unroll
                      expr:
                      (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: order -> int) count.order); s…
                      expansions:
                      • Unsat
                      termination proof

                      Termination proof

                      call `insert_order_side (List.tl orders) o` from `insert_order_side orders o`
                      original:insert_order_side orders o
                      sub:insert_order_side (List.tl orders) o
                      original ordinal:Ordinal.Int (_cnt orders)
                      sub ordinal:Ordinal.Int (_cnt (List.tl orders))
                      path:[not (o.o_price > (List.hd orders).o_price) && o.o_side = BUY && orders <> []]
                      proof:
                      detailed proof
                      ground_instances:2
                      definitions:0
                      inductions:0
                      search_time:
                      0.029s
                      details:
                      Expand
                      smt_stats:
                      num checks:6
                      arith-assume-eqs:1
                      arith-make-feasible:11
                      arith-max-columns:27
                      arith-conflicts:2
                      rlimit count:14793
                      mk clause:32
                      datatype occurs check:16
                      mk bool var:188
                      arith-lower:8
                      arith-diseq:1
                      datatype splits:38
                      decisions:31
                      propagations:18
                      interface eqs:1
                      arith-max-rows:8
                      conflicts:8
                      datatype accessor ax:26
                      datatype constructor ax:53
                      num allocs:12045081
                      final checks:5
                      added eqs:241
                      del clause:10
                      arith eq adapter:7
                      arith-upper:8
                      memory:5.450000
                      max memory:8.090000
                      Expand
                      • start[0.029s]
                          let (_x_0 : int) = o.o_price in
                          let (_x_1 : bool) = o.o_side = BUY in
                          let (_x_2 : int) = count.list count.order orders in
                          let (_x_3 : order list) = List.tl orders in
                          let (_x_4 : int) = count.list count.order _x_3 in
                          let (_x_5 : int) = (List.hd _x_3).o_price in
                          let (_x_6 : bool) = _x_3 <> [] in
                          not (_x_0 > (List.hd orders).o_price)
                          && _x_1 && orders <> [] && _x_2 >= 0 && _x_4 >= 0
                          ==> not (not (_x_0 > _x_5) && _x_1 && _x_6)
                              && not (not (_x_0 < _x_5) && not _x_1 && _x_6)
                              || Ordinal.( << ) (Ordinal.Int _x_4) (Ordinal.Int _x_2)
                      • simplify
                        into:
                        let (_x_0 : int) = o.o_price in
                        let (_x_1 : order list) = List.tl orders in
                        let (_x_2 : int) = (List.hd _x_1).o_price in
                        let (_x_3 : bool) = o.o_side = BUY in
                        let (_x_4 : bool) = _x_1 <> [] in
                        let (_x_5 : int) = count.list count.order _x_1 in
                        let (_x_6 : int) = count.list count.order orders in
                        (not ((_x_0 <= _x_2 && _x_3) && _x_4)
                         && not ((_x_2 <= _x_0 && not _x_3) && _x_4)
                         || Ordinal.( << ) (Ordinal.Int _x_5) (Ordinal.Int _x_6))
                        || not
                           ((((_x_0 <= (List.hd orders).o_price && _x_3) && orders <> [])
                             && _x_6 >= 0)
                            && _x_5 >= 0)
                        expansions:
                        []
                        rewrite_steps:
                          forward_chaining:
                          • unroll
                            expr:
                            (|Ordinal.<<_129/client|
                              (|Ordinal.Int_114/client|
                                (|`count.list { Resolved_term.spec_idx = 0;…
                            expansions:
                            • unroll
                              expr:
                              (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: order -> int) count.order); s…
                              expansions:
                              • Unsat
                              call `insert_order_side (List.tl orders) o` from `insert_order_side orders o`
                              original:insert_order_side orders o
                              sub:insert_order_side (List.tl orders) o
                              original ordinal:Ordinal.Int (_cnt orders)
                              sub ordinal:Ordinal.Int (_cnt (List.tl orders))
                              path:[not (o.o_price < (List.hd orders).o_price) && not (o.o_side = BUY) && orders <> []]
                              proof:
                              detailed proof
                              ground_instances:2
                              definitions:0
                              inductions:0
                              search_time:
                              0.040s
                              details:
                              Expand
                              smt_stats:
                              num checks:6
                              arith-assume-eqs:1
                              arith-make-feasible:16
                              arith-max-columns:27
                              arith-conflicts:2
                              rlimit count:11536
                              mk clause:35
                              datatype occurs check:16
                              mk bool var:249
                              arith-lower:12
                              arith-diseq:1
                              datatype splits:62
                              decisions:44
                              propagations:22
                              interface eqs:1
                              arith-max-rows:8
                              conflicts:9
                              datatype accessor ax:39
                              datatype constructor ax:72
                              num allocs:7091173
                              final checks:5
                              added eqs:325
                              del clause:14
                              arith eq adapter:9
                              arith-upper:10
                              memory:5.460000
                              max memory:8.090000
                              Expand
                              • start[0.040s]
                                  let (_x_0 : int) = o.o_price in
                                  let (_x_1 : bool) = o.o_side = BUY in
                                  let (_x_2 : bool) = not _x_1 in
                                  let (_x_3 : int) = count.list count.order orders in
                                  let (_x_4 : order list) = List.tl orders in
                                  let (_x_5 : int) = count.list count.order _x_4 in
                                  let (_x_6 : int) = (List.hd _x_4).o_price in
                                  let (_x_7 : bool) = _x_4 <> [] in
                                  not (_x_0 < (List.hd orders).o_price)
                                  && _x_2 && orders <> [] && _x_3 >= 0 && _x_5 >= 0
                                  ==> not (not (_x_0 > _x_6) && _x_1 && _x_7)
                                      && not (not (_x_0 < _x_6) && _x_2 && _x_7)
                                      || Ordinal.( << ) (Ordinal.Int _x_5) (Ordinal.Int _x_3)
                              • simplify
                                into:
                                let (_x_0 : int) = o.o_price in
                                let (_x_1 : order list) = List.tl orders in
                                let (_x_2 : int) = (List.hd _x_1).o_price in
                                let (_x_3 : bool) = o.o_side = BUY in
                                let (_x_4 : bool) = _x_1 <> [] in
                                let (_x_5 : bool) = not _x_3 in
                                let (_x_6 : int) = count.list count.order orders in
                                let (_x_7 : int) = count.list count.order _x_1 in
                                (not ((_x_0 <= _x_2 && _x_3) && _x_4) && not ((_x_2 <= _x_0 && _x_5) && _x_4)
                                 || not
                                    (((((List.hd orders).o_price <= _x_0 && _x_5) && orders <> [])
                                      && _x_6 >= 0)
                                     && _x_7 >= 0))
                                || Ordinal.( << ) (Ordinal.Int _x_7) (Ordinal.Int _x_6)
                                expansions:
                                []
                                rewrite_steps:
                                  forward_chaining:
                                  • unroll
                                    expr:
                                    (|Ordinal.<<_129/client|
                                      (|Ordinal.Int_114/client|
                                        (|`count.list { Resolved_term.spec_idx = 0;…
                                    expansions:
                                    • unroll
                                      expr:
                                      (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: order -> int) count.order); s…
                                      expansions:
                                      • Unsat
                                      termination proof

                                      Termination proof

                                      call `adjust_fill_prices (List.tl fills) f_price` from `adjust_fill_prices fills f_price`
                                      original:adjust_fill_prices fills f_price
                                      sub:adjust_fill_prices (List.tl fills) f_price
                                      original ordinal:Ordinal.Int (_cnt fills)
                                      sub ordinal:Ordinal.Int (_cnt (List.tl fills))
                                      path:[fills <> []]
                                      proof:
                                      detailed proof
                                      ground_instances:2
                                      definitions:0
                                      inductions:0
                                      search_time:
                                      0.036s
                                      details:
                                      Expand
                                      smt_stats:
                                      num checks:6
                                      arith-make-feasible:18
                                      arith-max-columns:24
                                      arith-conflicts:2
                                      rlimit count:17150
                                      mk clause:29
                                      datatype occurs check:19
                                      mk bool var:78
                                      arith-lower:9
                                      datatype splits:2
                                      decisions:19
                                      propagations:25
                                      arith-max-rows:9
                                      conflicts:7
                                      datatype accessor ax:9
                                      datatype constructor ax:8
                                      num allocs:18025962
                                      final checks:4
                                      added eqs:59
                                      del clause:14
                                      arith eq adapter:9
                                      arith-upper:17
                                      memory:5.320000
                                      max memory:8.090000
                                      Expand
                                      • start[0.036s]
                                          let (_x_0 : int) = count.list count.fill fills in
                                          let (_x_1 : fill list) = List.tl fills in
                                          let (_x_2 : int) = count.list count.fill _x_1 in
                                          fills <> [] && _x_0 >= 0 && _x_2 >= 0
                                          ==> not (_x_1 <> [])
                                              || Ordinal.( << ) (Ordinal.Int _x_2) (Ordinal.Int _x_0)
                                      • simplify
                                        into:
                                        let (_x_0 : int) = count.list count.fill fills in
                                        let (_x_1 : fill list) = List.tl fills in
                                        let (_x_2 : int) = count.list count.fill _x_1 in
                                        (not ((fills <> [] && _x_0 >= 0) && _x_2 >= 0)
                                         || Ordinal.( << ) (Ordinal.Int _x_2) (Ordinal.Int _x_0))
                                        || not (_x_1 <> [])
                                        expansions:
                                        []
                                        rewrite_steps:
                                          forward_chaining:
                                          • unroll
                                            expr:
                                            (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: fill -> int) count.fill); spe…
                                            expansions:
                                            • unroll
                                              expr:
                                              (|Ordinal.<<_129/client|
                                                (|Ordinal.Int_114/client|
                                                  (|`count.list { Resolved_term.spec_idx = 0;…
                                              expansions:
                                              • Unsat

                                              2.2 Book uncross

                                              In [5]:
                                              (* Measure for proving termination of `uncross_book` below *)
                                              let book_measure b =
                                                Ordinal.of_int (List.length b.b_buys + List.length b.b_sells)
                                              
                                              let rec uncross_book (b : book) (fills : fill list) (filled_qty : int) =
                                                match b.b_buys, b.b_sells with
                                                | [], [] | _, [] | [], _ ->
                                                  (* we need to check whether there have been fills before,
                                                    if so we need to adjust fill prices before getting out *)
                                                  begin
                                                    match fills with
                                                    | [] -> { uncrossed_book = b; uncrossed_fills = fills; uncrossed_qty = filled_qty }
                                                    | x::xs ->
                                                      let fills' = x :: (adjust_fill_prices xs x.fill_price) in
                                                    { uncrossed_book = b; uncrossed_fills = fills'; uncrossed_qty = filled_qty }
                                                  end
                                                | buy::bs, sell::ss ->
                                                  if buy.o_price >= sell.o_price then
                                                    begin
                                                      (* compute the fill qty and price *)
                                                      let fill_qty = if buy.o_qty < sell.o_qty then buy.o_qty else sell.o_qty in
                                                      let fill_price = (buy.o_price + sell.o_price) / 2 in
                                              
                                                      (* update the orders that traded *)
                                                      let buy' = { buy with o_qty = buy.o_qty - fill_qty } in
                                                      let sell' = { sell with o_qty = sell.o_qty - fill_qty } in
                                              
                                                      (* create the fills *)
                                                      let fill1 = {
                                                        fill_client_id = buy.o_client_id
                                                        ; fill_qty = fill_qty
                                                        ; fill_price = fill_price
                                                        ; fill_order_id = buy.o_id
                                                        ; fill_order_done = true } in
                                              
                                                      let fill2 = {
                                                        fill_client_id = sell.o_client_id
                                                        ; fill_qty = fill_qty
                                                        ; fill_price = fill_price
                                                        ; fill_order_id = sell.o_id
                                                        ; fill_order_done = true } in
                                              
                                                      (* now update the books and fills *)
                                                      let new_buys = if buy'.o_qty = 0 then bs else buy'::bs in
                                                      let new_sells = if sell'.o_qty = 0 then ss else sell'::ss in
                                                      let b' = {
                                                        b_buys = new_buys
                                                        ; b_sells = new_sells } in
                                              
                                                      (* We should not be generating fills for implied orders - there's
                                                        a different mechanism for that *)
                                                      let fills' = if not buy.o_is_implied then
                                                        fill1 :: fills else fills in
                                                      let fills' = if not sell.o_is_implied then
                                                        fill2 :: fills' else fills' in
                                              
                                                      (* recursively go to the next level *)
                                                      uncross_book b' fills' (filled_qty + fill_qty)
                                                    end
                                              
                                                  else
                                                    (* nothing to do here *)
                                                    { uncrossed_book = b; uncrossed_fills = fills; uncrossed_qty = filled_qty }
                                              [@@measure book_measure b]
                                              ;;
                                              
                                              Out[5]:
                                              val book_measure : book -> Ordinal.t = <fun>
                                              val uncross_book : book -> fill list -> Z.t -> uncross_res = <fun>
                                              
                                              termination proof

                                              Termination proof

                                              call `let (_x_0 : order list) = b.b_buys in let (_x_1 : order) = List.hd _x_0 in let (_x_2 : int) = _x_1.o_qty in let (_x_3 : order list) = b.b_sells in let (_x_4 : order) = List.hd _x_3 in let (_x_5 : int) = _x_4.o_qty in let (_x_6 : int) = if _x_2 < _x_5 then _x_2 else _x_5 in let (_x_7 : int) = _x_2 - _x_6 in let (_x_8 : order list) = List.tl _x_0 in let (_x_9 : int) = _x_5 - _x_6 in let (_x_10 : order list) = List.tl _x_3 in let (_x_11 : int) = (_x_1.o_price + _x_4.o_price) / 2 in let (_x_12 : fill list) = if not _x_1.o_is_implied then {fill_client_id = _x_1.o_client_id; fill_qty = _x_6; fill_price = _x_11; fill_order_id = _x_1.o_id; fill_order_done = true} :: fills else fills in uncross_book {b_buys = if _x_7 = 0 then _x_8 else {_x_1 with o_qty = _x_7} :: _x_8; b_sells = if _x_9 = 0 then _x_10 else {_x_4 with o_qty = _x_9} :: _x_10} (if not _x_4.o_is_implied then {fill_client_id = _x_4.o_client_id; fill_qty = _x_6; fill_price = _x_11; fill_order_id = _x_4.o_id; fill_order_done = true} :: _x_12 else _x_12) (filled_qty + _x_6)` from `uncross_book b fills filled_qty`
                                              original:uncross_book b fills filled_qty
                                              sub:let (_x_0 : order list) = b.b_buys in let (_x_1 : order) = List.hd _x_0 in let (_x_2 : int) = _x_1.o_qty in let (_x_3 : order list) = b.b_sells in let (_x_4 : order) = List.hd _x_3 in let (_x_5 : int) = _x_4.o_qty in let (_x_6 : int) = if _x_2 < _x_5 then _x_2 else _x_5 in let (_x_7 : int) = _x_2 - _x_6 in let (_x_8 : order list) = List.tl _x_0 in let (_x_9 : int) = _x_5 - _x_6 in let (_x_10 : order list) = List.tl _x_3 in let (_x_11 : int) = (_x_1.o_price + _x_4.o_price) / 2 in let (_x_12 : fill list) = if not _x_1.o_is_implied then {fill_client_id = _x_1.o_client_id; fill_qty = _x_6; fill_price = _x_11; fill_order_id = _x_1.o_id; fill_order_done = true} :: fills else fills in uncross_book {b_buys = if _x_7 = 0 then _x_8 else {_x_1 with o_qty = _x_7} :: _x_8; b_sells = if _x_9 = 0 then _x_10 else {_x_4 with o_qty = _x_9} :: _x_10} (if not _x_4.o_is_implied then {fill_client_id = _x_4.o_client_id; fill_qty = _x_6; fill_price = _x_11; fill_order_id = _x_4.o_id; fill_order_done = true} :: _x_12 else _x_12) (filled_qty + _x_6)
                                              original ordinal:book_measure b
                                              sub ordinal:let (_x_0 : order list) = b.b_buys in let (_x_1 : order) = List.hd _x_0 in let (_x_2 : int) = _x_1.o_qty in let (_x_3 : order list) = b.b_sells in let (_x_4 : order) = List.hd _x_3 in let (_x_5 : int) = _x_4.o_qty in let (_x_6 : int) = if _x_2 < _x_5 then _x_2 else _x_5 in let (_x_7 : int) = _x_2 - _x_6 in let (_x_8 : order list) = List.tl _x_0 in let (_x_9 : int) = _x_5 - _x_6 in let (_x_10 : order list) = List.tl _x_3 in book_measure {b_buys = if _x_7 = 0 then _x_8 else {_x_1 with o_qty = _x_7} :: _x_8; b_sells = if _x_9 = 0 then _x_10 else {_x_4 with o_qty = _x_9} :: _x_10}
                                              path:[(List.hd b.b_buys).o_price >= (List.hd b.b_sells).o_price && b.b_buys <> [] && b.b_sells <> []]
                                              proof:
                                              detailed proof
                                              ground_instances:5
                                              definitions:0
                                              inductions:0
                                              search_time:
                                              0.042s
                                              details:
                                              Expand
                                              smt_stats:
                                              num checks:12
                                              arith-assume-eqs:8
                                              arith-make-feasible:91
                                              arith-max-columns:42
                                              arith-conflicts:4
                                              rlimit count:28306
                                              arith-cheap-eqs:57
                                              mk clause:170
                                              datatype occurs check:50
                                              mk bool var:682
                                              arith-lower:64
                                              arith-diseq:32
                                              datatype splits:136
                                              decisions:173
                                              arith-propagations:15
                                              propagations:186
                                              interface eqs:8
                                              arith-bound-propagations-cheap:15
                                              arith-max-rows:21
                                              conflicts:23
                                              datatype accessor ax:84
                                              arith-bound-propagations-lp:18
                                              datatype constructor ax:245
                                              num allocs:25352756
                                              final checks:18
                                              added eqs:1271
                                              del clause:98
                                              arith eq adapter:65
                                              arith-upper:91
                                              time:0.001000
                                              memory:5.600000
                                              max memory:8.140000
                                              Expand
                                              • start[0.042s]
                                                  let (_x_0 : order list) = b.b_buys in
                                                  let (_x_1 : order) = List.hd _x_0 in
                                                  let (_x_2 : int) = _x_1.o_price in
                                                  let (_x_3 : order list) = b.b_sells in
                                                  let (_x_4 : order) = List.hd _x_3 in
                                                  let (_x_5 : int) = _x_4.o_price in
                                                  let (_x_6 : int) = List.length _x_0 + List.length _x_3 in
                                                  let (_x_7 : int) = if _x_6 >= 0 then _x_6 else 0 in
                                                  let (_x_8 : int) = List.length ….b_buys + List.length ….b_sells in
                                                  let (_x_9 : int) = if _x_8 >= 0 then _x_8 else 0 in
                                                  let (_x_10 : int) = _x_1.o_qty in
                                                  let (_x_11 : int) = _x_4.o_qty in
                                                  let (_x_12 : int) = if _x_10 < _x_11 then _x_10 else _x_11 in
                                                  let (_x_13 : int) = _x_10 - _x_12 in
                                                  let (_x_14 : order list) = List.tl _x_0 in
                                                  let (_x_15 : order list)
                                                      = if _x_13 = 0 then _x_14
                                                        else
                                                          {o_qty = _x_13; o_price = _x_2; o_time = …; o_id = …;
                                                           o_side = …; o_client_id = …; o_inst = …; o_is_implied = …}
                                                          :: _x_14
                                                  in
                                                  let (_x_16 : int) = _x_11 - _x_12 in
                                                  let (_x_17 : order list) = List.tl _x_3 in
                                                  let (_x_18 : order list)
                                                      = if _x_16 = 0 then _x_17
                                                        else
                                                          {o_qty = _x_16; o_price = _x_5; o_time = …; o_id = …;
                                                           o_side = …; o_client_id = …; o_inst = …; o_is_implied = …}
                                                          :: _x_17
                                                  in
                                                  _x_2 >= _x_5 && _x_0 <> [] && _x_3 <> [] && _x_7 >= 0 && _x_9 >= 0
                                                  ==> not
                                                      ((List.hd _x_15).o_price >= (List.hd _x_18).o_price
                                                       && _x_15 <> [] && _x_18 <> [])
                                                      || Ordinal.( << ) (Ordinal.Int _x_9) (Ordinal.Int _x_7)
                                              • simplify
                                                into:
                                                let (_x_0 : order list) = b.b_buys in
                                                let (_x_1 : order) = List.hd _x_0 in
                                                let (_x_2 : int) = _x_1.o_qty in
                                                let (_x_3 : order list) = b.b_sells in
                                                let (_x_4 : order) = List.hd _x_3 in
                                                let (_x_5 : int) = _x_4.o_qty in
                                                let (_x_6 : int) = (-1) * (if _x_5 <= _x_2 then _x_5 else _x_2) in
                                                let (_x_7 : int) = _x_2 + _x_6 in
                                                let (_x_8 : int) = _x_1.o_price in
                                                let (_x_9 : order list) = List.tl _x_0 in
                                                let (_x_10 : order list)
                                                    = if _x_7 = 0 then _x_9
                                                      else
                                                        {o_qty = _x_7; o_price = _x_8; o_time = …; o_id = …;
                                                         o_side = …; o_client_id = …; o_inst = …; o_is_implied = …}
                                                        :: _x_9
                                                in
                                                let (_x_11 : int) = _x_5 + _x_6 in
                                                let (_x_12 : int) = _x_4.o_price in
                                                let (_x_13 : order list) = List.tl _x_3 in
                                                let (_x_14 : order list)
                                                    = if _x_11 = 0 then _x_13
                                                      else
                                                        {o_qty = _x_11; o_price = _x_12; o_time = …; o_id = …;
                                                         o_side = …; o_client_id = …; o_inst = …; o_is_implied = …}
                                                        :: _x_13
                                                in
                                                let (_x_15 : int) = List.length _x_10 + List.length _x_14 in
                                                let (_x_16 : int) = List.length _x_0 + List.length _x_3 in
                                                (not
                                                 (((List.hd _x_10).o_price >= (List.hd _x_14).o_price && _x_10 <> [])
                                                  && _x_14 <> [])
                                                 || Ordinal.( << ) (Ordinal.Int (if _x_15 >= 0 then _x_15 else 0))
                                                    (Ordinal.Int (if _x_16 >= 0 then _x_16 else 0)))
                                                || not ((_x_8 >= _x_12 && _x_0 <> []) && _x_3 <> [])
                                                expansions:
                                                []
                                                rewrite_steps:
                                                  forward_chaining:
                                                  • unroll
                                                    expr:
                                                    (let ((a!1 (<= (o_qty_1395/client
                                                                     (|get.::.0_1644/server| (b_sells_1416/client b_19…
                                                    expansions:
                                                    • unroll
                                                      expr:
                                                      (let ((a!1 (<= (o_qty_1395/client
                                                                       (|get.::.0_1644/server| (b_sells_1416/client b_19…
                                                      expansions:
                                                      • unroll
                                                        expr:
                                                        (let ((a!1 (<= (o_qty_1395/client
                                                                         (|get.::.0_1644/server| (b_sells_1416/client b_19…
                                                        expansions:
                                                        • unroll
                                                          expr:
                                                          (|List.length_1947/server| (b_buys_1415/client b_1955/server))
                                                          expansions:
                                                          • unroll
                                                            expr:
                                                            (|List.length_1947/server| (b_sells_1416/client b_1955/server))
                                                            expansions:
                                                            • Unsat

                                                            We now have a function that does something real - uncross_book (b : book) (fills : fill list) (filled_qty : int). Let's experiment how it works with some concrete values.

                                                            In [6]:
                                                            let book1 = {
                                                              b_buys = [
                                                                (make BUY 100 55 1 (Outright OUT1) 1 false 1)
                                                                ; (make BUY 100 50 2 (Outright OUT1) 1 false 1)
                                                                ]
                                                             ; b_sells = [
                                                                (make BUY 100 54 3 (Outright OUT1) 1 false 1)
                                                                ; (make BUY 100 54 4 (Outright OUT1) 1 false 1)
                                                              ]
                                                            } in
                                                            
                                                            uncross_book book1 [] 0
                                                            
                                                            Out[6]:
                                                            - : uncross_res =
                                                            {uncrossed_book = <document>;
                                                             uncrossed_fills =
                                                              [{fill_client_id = 1; fill_qty = 100; fill_price = 54; fill_order_id = 3;
                                                                fill_order_done = true};
                                                               {fill_client_id = 1; fill_qty = 100; fill_price = 54; fill_order_id = 1;
                                                                fill_order_done = true}];
                                                             uncrossed_qty = 100}
                                                            
                                                            M1 Mar21
                                                            BuysSells
                                                            50 (100)
                                                            54 (100)

                                                            2.3 A few verification goals

                                                            Let's try to verify some verification goals.

                                                            The first one will make sure that for an order book that is sorted (so the best bid/ask orders will be the first ones in their respective lists. Note: this is not based on the 'imbalance' of the order book, this is simply taking the midpointt of the most aggressive orders.

                                                            In [7]:
                                                            (* Returns true if the orders are sorted with respect to price *)
                                                            let rec side_price_sorted (si : side) (orders : order list) =
                                                              match orders with
                                                              | [] -> true
                                                              | x::[] -> true
                                                              | x::y::xs ->
                                                                if si = BUY then
                                                                  begin
                                                                    if y.o_price > x.o_price && x.o_price > 0 then false else (side_price_sorted si (y::xs))
                                                                  end
                                                                else
                                                                  begin
                                                                    if y.o_price < x.o_price && y.o_price > 0 then false else (side_price_sorted si (y::xs))
                                                                  end
                                                            ;;
                                                            
                                                            (* Let's make sure all the fills have this price *)
                                                            let rec fills_good_price (fills : fill list) (p : int) =
                                                              match fills with
                                                              | [] -> true
                                                              | x::xs -> (x.fill_price = p) && (fills_good_price xs p)
                                                            ;;
                                                            
                                                            (** Let's to verify some properties *)
                                                            let fill_price_midpoint (b : book) =
                                                            
                                                              let buys_sorted = side_price_sorted BUY b.b_buys in
                                                              let sells_sorted = side_price_sorted SELL b.b_sells in
                                                            
                                                              let result_good =
                                                                begin
                                                                  match b.b_buys, b.b_sells with
                                                                  | [], _ -> true
                                                                  | _, [] -> true
                                                                  | x::xs, y::ys ->
                                                                    let unc_res = uncross_book b [] 0 in
                                                                    if x.o_price >= y.o_price then
                                                                      let midprice = (x.o_price + y.o_price) / 2 in
                                                                      (List.length unc_res.uncrossed_fills) > 0 && (fills_good_price unc_res.uncrossed_fills midprice)
                                                                    else
                                                                      true
                                                                end in
                                                            
                                                              (* This is the 'punchline'... if the sides are price-sorted, then the fills will be the first midpoint *)
                                                              (buys_sorted && sells_sorted) ==> result_good
                                                            ;;
                                                            
                                                            
                                                            verify fill_price_midpoint
                                                            
                                                            Out[7]:
                                                            val side_price_sorted : side -> order list -> bool = <fun>
                                                            val fills_good_price : fill list -> Z.t -> bool = <fun>
                                                            val fill_price_midpoint : book -> bool = <fun>
                                                            - : book -> bool = <fun>
                                                            module CX : sig val b : book end
                                                            
                                                            termination proof

                                                            Termination proof

                                                            call `let (_x_0 : order list) = List.tl orders in side_price_sorted si ((List.hd _x_0) :: (List.tl _x_0))` from `side_price_sorted si orders`
                                                            original:side_price_sorted si orders
                                                            sub:let (_x_0 : order list) = List.tl orders in side_price_sorted si ((List.hd _x_0) :: (List.tl _x_0))
                                                            original ordinal:Ordinal.Int (_cnt orders)
                                                            sub ordinal:let (_x_0 : order list) = List.tl orders in Ordinal.Int (_cnt ((List.hd _x_0) :: (List.tl _x_0)))
                                                            path:[let (_x_0 : int) = (List.hd orders).o_price in not ((List.hd (List.tl orders)).o_price > _x_0 && _x_0 > 0) && si = BUY && (List.tl orders) <> [] && orders <> []]
                                                            proof:
                                                            detailed proof
                                                            ground_instances:2
                                                            definitions:0
                                                            inductions:0
                                                            search_time:
                                                            0.031s
                                                            details:
                                                            Expand
                                                            smt_stats:
                                                            num checks:6
                                                            arith-make-feasible:35
                                                            arith-max-columns:36
                                                            arith-conflicts:2
                                                            rlimit count:37052
                                                            mk clause:50
                                                            datatype occurs check:15
                                                            mk bool var:237
                                                            arith-lower:21
                                                            datatype splits:43
                                                            decisions:54
                                                            propagations:35
                                                            arith-max-rows:15
                                                            conflicts:7
                                                            datatype accessor ax:28
                                                            arith-bound-propagations-lp:2
                                                            datatype constructor ax:64
                                                            num allocs:45717941
                                                            final checks:4
                                                            added eqs:298
                                                            del clause:27
                                                            arith eq adapter:17
                                                            arith-upper:32
                                                            memory:5.690000
                                                            max memory:8.360000
                                                            Expand
                                                            • start[0.031s]
                                                                let (_x_0 : order list) = List.tl orders in
                                                                let (_x_1 : order) = List.hd _x_0 in
                                                                let (_x_2 : int) = _x_1.o_price in
                                                                let (_x_3 : int) = (List.hd orders).o_price in
                                                                let (_x_4 : bool) = si = BUY in
                                                                let (_x_5 : int) = count.list count.order orders in
                                                                let (_x_6 : int) = count.list count.order (_x_1 :: …) in
                                                                let (_x_7 : int) = (List.hd …).o_price in
                                                                let (_x_8 : bool) = … <> [] in
                                                                not (_x_2 > _x_3 && _x_3 > 0)
                                                                && _x_4 && _x_0 <> [] && orders <> [] && _x_5 >= 0 && _x_6 >= 0
                                                                ==> not (not (_x_7 > _x_2 && _x_2 > 0) && _x_4 && _x_8)
                                                                    && not (not (_x_7 < _x_2 && _x_7 > 0) && not _x_4 && _x_8)
                                                                    || Ordinal.( << ) (Ordinal.Int _x_6) (Ordinal.Int _x_5)
                                                            • simplify
                                                              into:
                                                              let (_x_0 : order list) = List.tl orders in
                                                              let (_x_1 : order) = List.hd _x_0 in
                                                              let (_x_2 : int) = count.list count.order (_x_1 :: …) in
                                                              let (_x_3 : int) = count.list count.order orders in
                                                              let (_x_4 : int) = _x_1.o_price in
                                                              let (_x_5 : int) = (List.hd orders).o_price in
                                                              let (_x_6 : bool) = si = BUY in
                                                              let (_x_7 : int) = (List.hd …).o_price in
                                                              let (_x_8 : bool) = … <> [] in
                                                              (Ordinal.( << ) (Ordinal.Int _x_2) (Ordinal.Int _x_3)
                                                               || not
                                                                  (((((not (not (_x_4 <= _x_5) && not (_x_5 <= 0)) && _x_6) && _x_0 <> [])
                                                                     && orders <> [])
                                                                    && _x_3 >= 0)
                                                                   && _x_2 >= 0))
                                                              || not ((not (not (_x_7 <= _x_4) && not (_x_4 <= 0)) && _x_6) && _x_8)
                                                                 && not ((not (not (_x_4 <= _x_7) && not (_x_7 <= 0)) && not _x_6) && _x_8)
                                                              expansions:
                                                              []
                                                              rewrite_steps:
                                                                forward_chaining:
                                                                • unroll
                                                                  expr:
                                                                  (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: order -> int) count.order); s…
                                                                  expansions:
                                                                  • unroll
                                                                    expr:
                                                                    (let ((a!1 (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: order -> int) coun…
                                                                    expansions:
                                                                    • Unsat
                                                                    call `let (_x_0 : order list) = List.tl orders in side_price_sorted si ((List.hd _x_0) :: (List.tl _x_0))` from `side_price_sorted si orders`
                                                                    original:side_price_sorted si orders
                                                                    sub:let (_x_0 : order list) = List.tl orders in side_price_sorted si ((List.hd _x_0) :: (List.tl _x_0))
                                                                    original ordinal:Ordinal.Int (_cnt orders)
                                                                    sub ordinal:let (_x_0 : order list) = List.tl orders in Ordinal.Int (_cnt ((List.hd _x_0) :: (List.tl _x_0)))
                                                                    path:[let (_x_0 : int) = (List.hd (List.tl orders)).o_price in not (_x_0 < (List.hd orders).o_price && _x_0 > 0) && not (si = BUY) && (List.tl orders) <> [] && orders <> []]
                                                                    proof:
                                                                    detailed proof
                                                                    ground_instances:2
                                                                    definitions:0
                                                                    inductions:0
                                                                    search_time:
                                                                    0.030s
                                                                    details:
                                                                    Expand
                                                                    smt_stats:
                                                                    num checks:6
                                                                    arith-make-feasible:34
                                                                    arith-max-columns:35
                                                                    arith-conflicts:2
                                                                    rlimit count:32684
                                                                    mk clause:46
                                                                    datatype occurs check:19
                                                                    mk bool var:233
                                                                    arith-lower:22
                                                                    datatype splits:43
                                                                    decisions:54
                                                                    propagations:38
                                                                    arith-max-rows:14
                                                                    conflicts:8
                                                                    datatype accessor ax:29
                                                                    arith-bound-propagations-lp:1
                                                                    datatype constructor ax:64
                                                                    num allocs:35034082
                                                                    final checks:4
                                                                    added eqs:287
                                                                    del clause:25
                                                                    arith eq adapter:15
                                                                    arith-upper:28
                                                                    memory:5.650000
                                                                    max memory:8.270000
                                                                    Expand
                                                                    • start[0.030s]
                                                                        let (_x_0 : order list) = List.tl orders in
                                                                        let (_x_1 : order) = List.hd _x_0 in
                                                                        let (_x_2 : int) = _x_1.o_price in
                                                                        let (_x_3 : bool) = _x_2 > 0 in
                                                                        let (_x_4 : bool) = si = BUY in
                                                                        let (_x_5 : bool) = not _x_4 in
                                                                        let (_x_6 : int) = count.list count.order orders in
                                                                        let (_x_7 : int) = count.list count.order (_x_1 :: …) in
                                                                        let (_x_8 : int) = (List.hd …).o_price in
                                                                        let (_x_9 : bool) = … <> [] in
                                                                        not (_x_2 < (List.hd orders).o_price && _x_3)
                                                                        && _x_5 && _x_0 <> [] && orders <> [] && _x_6 >= 0 && _x_7 >= 0
                                                                        ==> not (not (_x_8 > _x_2 && _x_3) && _x_4 && _x_9)
                                                                            && not (not (_x_8 < _x_2 && _x_8 > 0) && _x_5 && _x_9)
                                                                            || Ordinal.( << ) (Ordinal.Int _x_7) (Ordinal.Int _x_6)
                                                                    • simplify
                                                                      into:
                                                                      let (_x_0 : order list) = List.tl orders in
                                                                      let (_x_1 : order) = List.hd _x_0 in
                                                                      let (_x_2 : int) = count.list count.order (_x_1 :: …) in
                                                                      let (_x_3 : int) = count.list count.order orders in
                                                                      let (_x_4 : int) = (List.hd …).o_price in
                                                                      let (_x_5 : int) = _x_1.o_price in
                                                                      let (_x_6 : bool) = not (_x_5 <= 0) in
                                                                      let (_x_7 : bool) = si = BUY in
                                                                      let (_x_8 : bool) = … <> [] in
                                                                      let (_x_9 : bool) = not _x_7 in
                                                                      (Ordinal.( << ) (Ordinal.Int _x_2) (Ordinal.Int _x_3)
                                                                       || not ((not (not (_x_4 <= _x_5) && _x_6) && _x_7) && _x_8)
                                                                          && not ((not (not (_x_5 <= _x_4) && not (_x_4 <= 0)) && _x_9) && _x_8))
                                                                      || not
                                                                         (((((not (not ((List.hd orders).o_price <= _x_5) && _x_6) && _x_9)
                                                                             && _x_0 <> [])
                                                                            && orders <> [])
                                                                           && _x_3 >= 0)
                                                                          && _x_2 >= 0)
                                                                      expansions:
                                                                      []
                                                                      rewrite_steps:
                                                                        forward_chaining:
                                                                        • unroll
                                                                          expr:
                                                                          (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: order -> int) count.order); s…
                                                                          expansions:
                                                                          • unroll
                                                                            expr:
                                                                            (let ((a!1 (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: order -> int) coun…
                                                                            expansions:
                                                                            • Unsat
                                                                            termination proof

                                                                            Termination proof

                                                                            call `fills_good_price (List.tl fills) p` from `fills_good_price fills p`
                                                                            original:fills_good_price fills p
                                                                            sub:fills_good_price (List.tl fills) p
                                                                            original ordinal:Ordinal.Int (_cnt fills)
                                                                            sub ordinal:Ordinal.Int (_cnt (List.tl fills))
                                                                            path:[(List.hd fills).fill_price = p && fills <> []]
                                                                            proof:
                                                                            detailed proof
                                                                            ground_instances:3
                                                                            definitions:0
                                                                            inductions:0
                                                                            search_time:
                                                                            0.041s
                                                                            details:
                                                                            Expand
                                                                            smt_stats:
                                                                            num checks:8
                                                                            arith-make-feasible:26
                                                                            arith-max-columns:35
                                                                            arith-conflicts:2
                                                                            rlimit count:40227
                                                                            mk clause:47
                                                                            datatype occurs check:34
                                                                            mk bool var:118
                                                                            arith-lower:15
                                                                            datatype splits:3
                                                                            decisions:27
                                                                            propagations:38
                                                                            arith-max-rows:11
                                                                            conflicts:10
                                                                            datatype accessor ax:10
                                                                            datatype constructor ax:11
                                                                            num allocs:57091625
                                                                            final checks:6
                                                                            added eqs:84
                                                                            del clause:19
                                                                            arith eq adapter:14
                                                                            arith-upper:22
                                                                            memory:5.520000
                                                                            max memory:8.360000
                                                                            Expand
                                                                            • start[0.041s]
                                                                                let (_x_0 : int) = count.list count.fill fills in
                                                                                let (_x_1 : fill list) = List.tl fills in
                                                                                let (_x_2 : int) = count.list count.fill _x_1 in
                                                                                (List.hd fills).fill_price = p && fills <> [] && _x_0 >= 0 && _x_2 >= 0
                                                                                ==> not ((List.hd _x_1).fill_price = p && _x_1 <> [])
                                                                                    || Ordinal.( << ) (Ordinal.Int _x_2) (Ordinal.Int _x_0)
                                                                            • simplify
                                                                              into:
                                                                              let (_x_0 : int) = count.list count.fill fills in
                                                                              let (_x_1 : fill list) = List.tl fills in
                                                                              let (_x_2 : int) = count.list count.fill _x_1 in
                                                                              (not
                                                                               ((((List.hd fills).fill_price = p && fills <> []) && _x_0 >= 0) && _x_2 >= 0)
                                                                               || not ((List.hd _x_1).fill_price = p && _x_1 <> []))
                                                                              || Ordinal.( << ) (Ordinal.Int _x_2) (Ordinal.Int _x_0)
                                                                              expansions:
                                                                              []
                                                                              rewrite_steps:
                                                                                forward_chaining:
                                                                                • unroll
                                                                                  expr:
                                                                                  (|Ordinal.<<_129/client|
                                                                                    (|Ordinal.Int_114/client|
                                                                                      (|`count.list { Resolved_term.spec_idx = 0;…
                                                                                  expansions:
                                                                                  • unroll
                                                                                    expr:
                                                                                    (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: fill -> int) count.fill); spe…
                                                                                    expansions:
                                                                                    • unroll
                                                                                      expr:
                                                                                      (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: fill -> int) count.fill); spe…
                                                                                      expansions:
                                                                                      • Unsat
                                                                                      Counterexample (after 7 steps, 0.051s):
                                                                                      let b : book =
                                                                                        let (_x_0 : instrument) = Strategy STRAT1 in
                                                                                        {b_buys =
                                                                                         [{o_qty = 14680; o_price = 45687; o_time = 17; o_id = 18; o_side = BUY;
                                                                                           o_client_id = 19; o_inst = _x_0; o_is_implied = true}];
                                                                                         b_sells =
                                                                                         [{o_qty = (-1); o_price = 45687; o_time = 3; o_id = 4; o_side = BUY;
                                                                                           o_client_id = 5; o_inst = _x_0; o_is_implied = true}]}
                                                                                      
                                                                                      Refuted
                                                                                      proof attempt
                                                                                      ground_instances:7
                                                                                      definitions:0
                                                                                      inductions:0
                                                                                      search_time:
                                                                                      0.051s
                                                                                      details:
                                                                                      Expand
                                                                                      smt_stats:
                                                                                      arith-assume-eqs:14
                                                                                      arith-make-feasible:161
                                                                                      arith-max-columns:55
                                                                                      arith-conflicts:4
                                                                                      arith-gcd-calls:3
                                                                                      datatype occurs check:442
                                                                                      arith-lower:136
                                                                                      arith-diseq:33
                                                                                      datatype splits:500
                                                                                      arith-propagations:20
                                                                                      arith-patches-success:3
                                                                                      propagations:631
                                                                                      arith-patches:3
                                                                                      interface eqs:14
                                                                                      arith-bound-propagations-cheap:20
                                                                                      conflicts:35
                                                                                      datatype constructor ax:971
                                                                                      num allocs:66037971
                                                                                      final checks:38
                                                                                      added eqs:4548
                                                                                      del clause:129
                                                                                      num checks:15
                                                                                      rlimit count:25152
                                                                                      arith-cheap-eqs:77
                                                                                      mk clause:357
                                                                                      mk bool var:2269
                                                                                      decisions:690
                                                                                      arith-max-rows:30
                                                                                      datatype accessor ax:299
                                                                                      minimized lits:13
                                                                                      arith-bound-propagations-lp:11
                                                                                      arith eq adapter:84
                                                                                      arith-upper:129
                                                                                      time:0.002000
                                                                                      memory:9.270000
                                                                                      max memory:9.270000
                                                                                      Expand
                                                                                      • start[0.051s]
                                                                                          let (_x_0 : order list) = ( :var_0: ).b_buys in
                                                                                          let (_x_1 : order list) = ( :var_0: ).b_sells in
                                                                                          side_price_sorted BUY _x_0 && side_price_sorted SELL _x_1
                                                                                          ==> (if _x_0 <> []
                                                                                               then
                                                                                                 if _x_1 <> []
                                                                                                 then
                                                                                                   if (List.hd _x_0).o_price >= (List.hd _x_1).o_price
                                                                                                   then List.length … > 0 && fills_good_price … … else true
                                                                                                 else true
                                                                                               else true)
                                                                                      • simplify

                                                                                        into:
                                                                                        let (_x_0 : order list) = ( :var_0: ).b_buys in
                                                                                        let (_x_1 : order list) = ( :var_0: ).b_sells in
                                                                                        (((not (List.length … <= 0) && fills_good_price … …
                                                                                           || not ((List.hd _x_0).o_price >= (List.hd _x_1).o_price))
                                                                                          || not (_x_1 <> []))
                                                                                         || not (_x_0 <> []))
                                                                                        || not (side_price_sorted BUY _x_0 && side_price_sorted SELL _x_1)
                                                                                        expansions:
                                                                                        []
                                                                                        rewrite_steps:
                                                                                          forward_chaining:
                                                                                          • unroll
                                                                                            expr:
                                                                                            (side_price_sorted_1575/client
                                                                                              SELL_1343/client
                                                                                              (b_sells_1416/client b_1606/client))
                                                                                            expansions:
                                                                                            • unroll
                                                                                              expr:
                                                                                              (side_price_sorted_1575/client
                                                                                                BUY_1342/client
                                                                                                (b_buys_1415/client b_1606/client))
                                                                                              expansions:
                                                                                              • unroll
                                                                                                expr:
                                                                                                (|List.length_2365/server|
                                                                                                  (uncrossed_fills_1490/client (uncross_book_1544/client b_1606/client |[…
                                                                                                expansions:
                                                                                                • unroll
                                                                                                  expr:
                                                                                                  (uncross_book_1544/client b_1606/client |[]| 0)
                                                                                                  expansions:
                                                                                                  • unroll
                                                                                                    expr:
                                                                                                    (let ((a!1 (+ (o_price_1396/client
                                                                                                                    (|get.::.0_2358/server| (b_buys_1415/client b_160…
                                                                                                    expansions:
                                                                                                    • unroll
                                                                                                      expr:
                                                                                                      (let ((a!1 (<= (o_qty_1395/client
                                                                                                                       (|get.::.0_2358/server| (b_sells_1416/client b_16…
                                                                                                      expansions:
                                                                                                      • unroll
                                                                                                        expr:
                                                                                                        (let ((a!1 (|::| (|get.::.0_2358/server|
                                                                                                                           (|get.::.1_2359/server| (b_sells_1416/cl…
                                                                                                        expansions:
                                                                                                        • Sat (Some let b : book = let (_x_0 : instrument) = Strategy STRAT1 in {b_buys = [{o_qty = (Z.of_nativeint (14680n)); o_price = (Z.of_nativeint (45687n)); o_time = (Z.of_nativeint (17n)); o_id = (Z.of_nativeint (18n)); o_side = BUY; o_client_id = (Z.of_nativeint (19n)); o_inst = _x_0; o_is_implied = true}]; b_sells = [{o_qty = (Z.of_nativeint (-1n)); o_price = (Z.of_nativeint (45687n)); o_time = (Z.of_nativeint (3n)); o_id = (Z.of_nativeint (4n)); o_side = BUY; o_client_id = (Z.of_nativeint (5n)); o_inst = _x_0; o_is_implied = true}]} )

                                                                                                        Our second verification goal will look to make sure that no quantities are lost during uncrossing. Note that no fills are generated for implied orders (there's a different mechanism for that), so when we look at the book we will only consider outright orders. Note that o_qty represents the residual order quantity - for this demo, we do not differentiate between original, filled and residual order quantity. When order is created, the qty is set to that number and is decreased when filled.

                                                                                                        In [8]:
                                                                                                        (* All no quantities get lost during uncross *)
                                                                                                        let no_lost_qtys (b : book) =
                                                                                                        
                                                                                                          let rec qtys_pos_nonimp = function
                                                                                                            | [] -> true
                                                                                                            | x::xs -> x.o_qty >= 0 && not x.o_is_implied && (qtys_pos_nonimp xs) in
                                                                                                        
                                                                                                          let rec sum_qtys = function
                                                                                                            | [] -> 0
                                                                                                            | x::xs -> x.o_qty + (sum_qtys xs) in
                                                                                                        
                                                                                                          let rec sum_fill_qtys = function
                                                                                                            | [] -> 0
                                                                                                            | x::xs -> x.fill_qty + (sum_fill_qtys xs) in
                                                                                                        
                                                                                                          let unc_res = uncross_book b [] 0 in
                                                                                                        
                                                                                                          (* We need to make sure the book is non-negative *)
                                                                                                          let book_nonneg_nonimp = (qtys_pos_nonimp b.b_buys) && (qtys_pos_nonimp b.b_sells) in
                                                                                                        
                                                                                                          (* Let's sum up all of the quantities of orders before the uncross *)
                                                                                                          let count_before = (sum_qtys b.b_buys) + (sum_qtys b.b_sells) in
                                                                                                        
                                                                                                          (* And after *)
                                                                                                          let count_after = (sum_qtys unc_res.uncrossed_book.b_buys) +
                                                                                                                            (sum_qtys unc_res.uncrossed_book.b_sells) +
                                                                                                                            (sum_fill_qtys unc_res.uncrossed_fills) in
                                                                                                        
                                                                                                          book_nonneg_nonimp ==> (count_before = count_after)
                                                                                                        ;;
                                                                                                        
                                                                                                        verify ~upto:15 no_lost_qtys
                                                                                                        
                                                                                                        Out[8]:
                                                                                                        val no_lost_qtys : book -> bool = <fun>
                                                                                                        - : book -> bool = <fun>
                                                                                                        
                                                                                                        termination proof

                                                                                                        Termination proof

                                                                                                        call `rec_fun.no_lost_qtys.sum_fill_qtys.2 (List.tl _z)` from `rec_fun.no_lost_qtys.sum_fill_qtys.2 _z`
                                                                                                        original:rec_fun.no_lost_qtys.sum_fill_qtys.2 _z
                                                                                                        sub:rec_fun.no_lost_qtys.sum_fill_qtys.2 (List.tl _z)
                                                                                                        original ordinal:Ordinal.Int (_cnt _z)
                                                                                                        sub ordinal:Ordinal.Int (_cnt (List.tl _z))
                                                                                                        path:[_z <> []]
                                                                                                        proof:
                                                                                                        detailed proof
                                                                                                        ground_instances:3
                                                                                                        definitions:0
                                                                                                        inductions:0
                                                                                                        search_time:
                                                                                                        0.045s
                                                                                                        details:
                                                                                                        Expand
                                                                                                        smt_stats:
                                                                                                        num checks:8
                                                                                                        arith-make-feasible:22
                                                                                                        arith-max-columns:36
                                                                                                        arith-conflicts:2
                                                                                                        rlimit count:28085
                                                                                                        mk clause:47
                                                                                                        datatype occurs check:22
                                                                                                        mk bool var:115
                                                                                                        arith-lower:13
                                                                                                        datatype splits:3
                                                                                                        decisions:27
                                                                                                        propagations:34
                                                                                                        arith-max-rows:10
                                                                                                        conflicts:10
                                                                                                        datatype accessor ax:10
                                                                                                        datatype constructor ax:11
                                                                                                        num allocs:89748584
                                                                                                        final checks:6
                                                                                                        added eqs:78
                                                                                                        del clause:17
                                                                                                        arith eq adapter:12
                                                                                                        arith-upper:18
                                                                                                        memory:6.260000
                                                                                                        max memory:9.370000
                                                                                                        Expand
                                                                                                        • start[0.045s]
                                                                                                            let (_x_0 : int) = count.list count.fill _z in
                                                                                                            let (_x_1 : fill list) = List.tl _z in
                                                                                                            let (_x_2 : int) = count.list count.fill _x_1 in
                                                                                                            _z <> [] && _x_0 >= 0 && _x_2 >= 0
                                                                                                            ==> not (_x_1 <> [])
                                                                                                                || Ordinal.( << ) (Ordinal.Int _x_2) (Ordinal.Int _x_0)
                                                                                                        • simplify
                                                                                                          into:
                                                                                                          let (_x_0 : fill list) = List.tl _z in
                                                                                                          let (_x_1 : int) = count.list count.fill _x_0 in
                                                                                                          let (_x_2 : int) = count.list count.fill _z in
                                                                                                          (not (_x_0 <> []) || Ordinal.( << ) (Ordinal.Int _x_1) (Ordinal.Int _x_2))
                                                                                                          || not ((_z <> [] && _x_2 >= 0) && _x_1 >= 0)
                                                                                                          expansions:
                                                                                                          []
                                                                                                          rewrite_steps:
                                                                                                            forward_chaining:
                                                                                                            • unroll
                                                                                                              expr:
                                                                                                              (|Ordinal.<<_129/client|
                                                                                                                (|Ordinal.Int_114/client|
                                                                                                                  (|`count.list { Resolved_term.spec_idx = 0;…
                                                                                                              expansions:
                                                                                                              • unroll
                                                                                                                expr:
                                                                                                                (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: fill -> int) count.fill); spe…
                                                                                                                expansions:
                                                                                                                • unroll
                                                                                                                  expr:
                                                                                                                  (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: fill -> int) count.fill); spe…
                                                                                                                  expansions:
                                                                                                                  • Unsat
                                                                                                                  termination proof

                                                                                                                  Termination proof

                                                                                                                  call `rec_fun.no_lost_qtys.sum_qtys.1 (List.tl _y)` from `rec_fun.no_lost_qtys.sum_qtys.1 _y`
                                                                                                                  original:rec_fun.no_lost_qtys.sum_qtys.1 _y
                                                                                                                  sub:rec_fun.no_lost_qtys.sum_qtys.1 (List.tl _y)
                                                                                                                  original ordinal:Ordinal.Int (_cnt _y)
                                                                                                                  sub ordinal:Ordinal.Int (_cnt (List.tl _y))
                                                                                                                  path:[_y <> []]
                                                                                                                  proof:
                                                                                                                  detailed proof
                                                                                                                  ground_instances:3
                                                                                                                  definitions:0
                                                                                                                  inductions:0
                                                                                                                  search_time:
                                                                                                                  0.042s
                                                                                                                  details:
                                                                                                                  Expand
                                                                                                                  smt_stats:
                                                                                                                  num checks:8
                                                                                                                  arith-assume-eqs:4
                                                                                                                  arith-make-feasible:30
                                                                                                                  arith-max-columns:39
                                                                                                                  arith-conflicts:2
                                                                                                                  rlimit count:31995
                                                                                                                  mk clause:68
                                                                                                                  datatype occurs check:28
                                                                                                                  mk bool var:241
                                                                                                                  arith-lower:18
                                                                                                                  datatype splits:39
                                                                                                                  decisions:50
                                                                                                                  propagations:41
                                                                                                                  interface eqs:4
                                                                                                                  arith-max-rows:15
                                                                                                                  conflicts:9
                                                                                                                  datatype accessor ax:30
                                                                                                                  datatype constructor ax:61
                                                                                                                  num allocs:97938696
                                                                                                                  final checks:10
                                                                                                                  added eqs:271
                                                                                                                  del clause:31
                                                                                                                  arith eq adapter:17
                                                                                                                  arith-upper:24
                                                                                                                  memory:8.970000
                                                                                                                  max memory:9.370000
                                                                                                                  Expand
                                                                                                                  • start[0.042s]
                                                                                                                      let (_x_0 : int) = count.list count.order _y in
                                                                                                                      let (_x_1 : order list) = List.tl _y in
                                                                                                                      let (_x_2 : int) = count.list count.order _x_1 in
                                                                                                                      _y <> [] && _x_0 >= 0 && _x_2 >= 0
                                                                                                                      ==> not (_x_1 <> [])
                                                                                                                          || Ordinal.( << ) (Ordinal.Int _x_2) (Ordinal.Int _x_0)
                                                                                                                  • simplify
                                                                                                                    into:
                                                                                                                    let (_x_0 : order list) = List.tl _y in
                                                                                                                    let (_x_1 : int) = count.list count.order _x_0 in
                                                                                                                    let (_x_2 : int) = count.list count.order _y in
                                                                                                                    (not (_x_0 <> []) || Ordinal.( << ) (Ordinal.Int _x_1) (Ordinal.Int _x_2))
                                                                                                                    || not ((_y <> [] && _x_2 >= 0) && _x_1 >= 0)
                                                                                                                    expansions:
                                                                                                                    []
                                                                                                                    rewrite_steps:
                                                                                                                      forward_chaining:
                                                                                                                      • unroll
                                                                                                                        expr:
                                                                                                                        (|Ordinal.<<_129/client|
                                                                                                                          (|Ordinal.Int_114/client|
                                                                                                                            (|`count.list { Resolved_term.spec_idx = 0;…
                                                                                                                        expansions:
                                                                                                                        • unroll
                                                                                                                          expr:
                                                                                                                          (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: order -> int) count.order); s…
                                                                                                                          expansions:
                                                                                                                          • unroll
                                                                                                                            expr:
                                                                                                                            (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: order -> int) count.order); s…
                                                                                                                            expansions:
                                                                                                                            • Unsat
                                                                                                                            termination proof

                                                                                                                            Termination proof

                                                                                                                            call `rec_fun.no_lost_qtys.qtys_pos_nonimp.0 (List.tl _x)` from `rec_fun.no_lost_qtys.qtys_pos_nonimp.0 _x`
                                                                                                                            original:rec_fun.no_lost_qtys.qtys_pos_nonimp.0 _x
                                                                                                                            sub:rec_fun.no_lost_qtys.qtys_pos_nonimp.0 (List.tl _x)
                                                                                                                            original ordinal:Ordinal.Int (_cnt _x)
                                                                                                                            sub ordinal:Ordinal.Int (_cnt (List.tl _x))
                                                                                                                            path:[not (List.hd _x).o_is_implied && (List.hd _x).o_qty >= 0 && _x <> []]
                                                                                                                            proof:
                                                                                                                            detailed proof
                                                                                                                            ground_instances:3
                                                                                                                            definitions:0
                                                                                                                            inductions:0
                                                                                                                            search_time:
                                                                                                                            0.063s
                                                                                                                            details:
                                                                                                                            Expand
                                                                                                                            smt_stats:
                                                                                                                            num checks:8
                                                                                                                            arith-assume-eqs:2
                                                                                                                            arith-make-feasible:40
                                                                                                                            arith-max-columns:48
                                                                                                                            arith-conflicts:2
                                                                                                                            rlimit count:36433
                                                                                                                            mk clause:67
                                                                                                                            datatype occurs check:32
                                                                                                                            mk bool var:272
                                                                                                                            arith-lower:26
                                                                                                                            datatype splits:47
                                                                                                                            decisions:64
                                                                                                                            propagations:65
                                                                                                                            interface eqs:2
                                                                                                                            arith-max-rows:20
                                                                                                                            conflicts:9
                                                                                                                            datatype accessor ax:34
                                                                                                                            datatype constructor ax:67
                                                                                                                            num allocs:116134876
                                                                                                                            final checks:8
                                                                                                                            added eqs:307
                                                                                                                            del clause:41
                                                                                                                            arith eq adapter:26
                                                                                                                            arith-upper:46
                                                                                                                            memory:9.110000
                                                                                                                            max memory:11.670000
                                                                                                                            Expand
                                                                                                                            • start[0.063s]
                                                                                                                                let (_x_0 : order) = List.hd _x in
                                                                                                                                let (_x_1 : int) = count.list count.order _x in
                                                                                                                                let (_x_2 : order list) = List.tl _x in
                                                                                                                                let (_x_3 : int) = count.list count.order _x_2 in
                                                                                                                                let (_x_4 : order) = List.hd _x_2 in
                                                                                                                                not _x_0.o_is_implied
                                                                                                                                && _x_0.o_qty >= 0 && _x <> [] && _x_1 >= 0 && _x_3 >= 0
                                                                                                                                ==> not (not _x_4.o_is_implied && _x_4.o_qty >= 0 && _x_2 <> [])
                                                                                                                                    || Ordinal.( << ) (Ordinal.Int _x_3) (Ordinal.Int _x_1)
                                                                                                                            • simplify
                                                                                                                              into:
                                                                                                                              let (_x_0 : order list) = List.tl _x in
                                                                                                                              let (_x_1 : int) = count.list count.order _x_0 in
                                                                                                                              let (_x_2 : int) = count.list count.order _x in
                                                                                                                              let (_x_3 : order) = List.hd _x_0 in
                                                                                                                              let (_x_4 : order) = List.hd _x in
                                                                                                                              (Ordinal.( << ) (Ordinal.Int _x_1) (Ordinal.Int _x_2)
                                                                                                                               || not ((not _x_3.o_is_implied && _x_3.o_qty >= 0) && _x_0 <> []))
                                                                                                                              || not
                                                                                                                                 ((((not _x_4.o_is_implied && _x_4.o_qty >= 0) && _x <> []) && _x_2 >= 0)
                                                                                                                                  && _x_1 >= 0)
                                                                                                                              expansions:
                                                                                                                              []
                                                                                                                              rewrite_steps:
                                                                                                                                forward_chaining:
                                                                                                                                • unroll
                                                                                                                                  expr:
                                                                                                                                  (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: order -> int) count.order); s…
                                                                                                                                  expansions:
                                                                                                                                  • unroll
                                                                                                                                    expr:
                                                                                                                                    (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: order -> int) count.order); s…
                                                                                                                                    expansions:
                                                                                                                                    • unroll
                                                                                                                                      expr:
                                                                                                                                      (|Ordinal.<<_129/client|
                                                                                                                                        (|Ordinal.Int_114/client|
                                                                                                                                          (|`count.list { Resolved_term.spec_idx = 0;…
                                                                                                                                      expansions:
                                                                                                                                      • Unsat
                                                                                                                                      Proved up to 15 steps

                                                                                                                                      2.4 Test generation

                                                                                                                                      First, we will decompose the function and then generate test cases for it.

                                                                                                                                      In [9]:
                                                                                                                                      (* This is a 'side_condition' function that tells decomposition that we're only interested in cases where the
                                                                                                                                      initial fills are empty *)
                                                                                                                                      let cond (b : book) (fills : fill list) (filled_qty : int) =
                                                                                                                                       fills = [] && filled_qty = 0
                                                                                                                                      ;;
                                                                                                                                      
                                                                                                                                      let d = Modular_decomp.top ~assuming:"cond" "uncross_book" ~prune:true [@@program];;
                                                                                                                                      
                                                                                                                                      Out[9]:
                                                                                                                                      val cond : book -> fill list -> Z.t -> bool = <fun>
                                                                                                                                      val d : Top_result.modular_decomposition =
                                                                                                                                        (decomp (uncross_book b, fills, filled_qty
                                                                                                                                         :regions (<reg 4>,
                                                                                                                                                   <reg 5>,
                                                                                                                                                   <reg 6>,
                                                                                                                                                   <reg 7>,
                                                                                                                                                   <reg 8>,
                                                                                                                                                   <reg 9>,
                                                                                                                                                   <reg 10>,
                                                                                                                                                   <reg 11>,
                                                                                                                                                   <reg 12>,
                                                                                                                                                   <reg 13>,
                                                                                                                                                   <reg 14>,
                                                                                                                                                   <reg 15>,
                                                                                                                                                   <reg 16>,
                                                                                                                                                   <reg 17>,
                                                                                                                                                   <reg 18>,
                                                                                                                                                   <reg 19>))
                                                                                                                                      
                                                                                                                                      Regions details

                                                                                                                                      No group selected.

                                                                                                                                      • Concrete regions are numbered
                                                                                                                                      • Unnumbered regions are groups whose children share a particular constraint
                                                                                                                                      • Click on a region to view its details
                                                                                                                                      • Double click on a region to zoom in on it
                                                                                                                                      • Shift+double click to zoom out
                                                                                                                                      • Hit escape to reset back to the top
                                                                                                                                      decomp of (uncross_book b, fills, filled_qty
                                                                                                                                      Reg_idConstraintsInvariant
                                                                                                                                      19
                                                                                                                                      • fills = []
                                                                                                                                      • filled_qty = 0
                                                                                                                                      • not (fills <> [])
                                                                                                                                      • not Is_a([], b.b_buys)
                                                                                                                                      • not (b.b_sells <> [])
                                                                                                                                      {uncrossed_book = b; uncrossed_fills = fills; uncrossed_qty = filled_qty}
                                                                                                                                      18
                                                                                                                                      • fills = []
                                                                                                                                      • filled_qty = 0
                                                                                                                                      • not (fills <> [])
                                                                                                                                      • Is_a([], b.b_buys)
                                                                                                                                      • not (b.b_sells <> [])
                                                                                                                                      {uncrossed_book = b; uncrossed_fills = fills; uncrossed_qty = filled_qty}
                                                                                                                                      17
                                                                                                                                      • fills = []
                                                                                                                                      • filled_qty = 0
                                                                                                                                      • not (fills <> [])
                                                                                                                                      • not (b.b_buys <> [])
                                                                                                                                      • b.b_sells <> []
                                                                                                                                      {uncrossed_book = b; uncrossed_fills = fills; uncrossed_qty = filled_qty}
                                                                                                                                      16
                                                                                                                                      • fills = []
                                                                                                                                      • filled_qty = 0
                                                                                                                                      • not ((List.hd b.b_buys).o_price >= (List.hd b.b_sells).o_price)
                                                                                                                                      • b.b_buys <> []
                                                                                                                                      • b.b_sells <> []
                                                                                                                                      {uncrossed_book = b; uncrossed_fills = fills; uncrossed_qty = filled_qty}
                                                                                                                                      15
                                                                                                                                      • fills = []
                                                                                                                                      • filled_qty = 0
                                                                                                                                      • (List.hd b.b_buys).o_is_implied
                                                                                                                                      • (List.hd b.b_sells).o_is_implied
                                                                                                                                      • not ((List.hd b.b_buys).o_qty - (List.hd b.b_sells).o_qty = 0)
                                                                                                                                      • not ((List.hd b.b_buys).o_qty < (List.hd b.b_sells).o_qty)
                                                                                                                                      • (List.hd b.b_buys).o_price >= (List.hd b.b_sells).o_price
                                                                                                                                      • b.b_buys <> []
                                                                                                                                      • b.b_sells <> []
                                                                                                                                      let (_x_0 : order list) = b.b_buys in
                                                                                                                                      let (_x_1 : order) = List.hd _x_0 in
                                                                                                                                      let (_x_2 : order list) = b.b_sells in
                                                                                                                                      let (_x_3 : int) = (List.hd _x_2).o_qty in
                                                                                                                                      uncross_book
                                                                                                                                      {b_buys = {_x_1 with o_qty = _x_1.o_qty - _x_3} :: (List.tl _x_0);
                                                                                                                                       b_sells = List.tl _x_2}
                                                                                                                                      fills (filled_qty + _x_3)
                                                                                                                                      14
                                                                                                                                      • fills = []
                                                                                                                                      • filled_qty = 0
                                                                                                                                      • not (List.hd b.b_buys).o_is_implied
                                                                                                                                      • (List.hd b.b_sells).o_is_implied
                                                                                                                                      • not ((List.hd b.b_buys).o_qty - (List.hd b.b_sells).o_qty = 0)
                                                                                                                                      • not ((List.hd b.b_buys).o_qty < (List.hd b.b_sells).o_qty)
                                                                                                                                      • (List.hd b.b_buys).o_price >= (List.hd b.b_sells).o_price
                                                                                                                                      • b.b_buys <> []
                                                                                                                                      • b.b_sells <> []
                                                                                                                                      let (_x_0 : order list) = b.b_buys in
                                                                                                                                      let (_x_1 : order) = List.hd _x_0 in
                                                                                                                                      let (_x_2 : order list) = b.b_sells in
                                                                                                                                      let (_x_3 : order) = List.hd _x_2 in
                                                                                                                                      let (_x_4 : int) = _x_3.o_qty in
                                                                                                                                      uncross_book
                                                                                                                                      {b_buys = {_x_1 with o_qty = _x_1.o_qty - _x_4} :: (List.tl _x_0);
                                                                                                                                       b_sells = List.tl _x_2}
                                                                                                                                      ({fill_client_id = _x_1.o_client_id; fill_qty = _x_4;
                                                                                                                                        fill_price = (_x_1.o_price + _x_3.o_price) / 2; fill_order_id = _x_1.o_id;
                                                                                                                                        fill_order_done = true}
                                                                                                                                       :: fills)
                                                                                                                                      (filled_qty + _x_4)
                                                                                                                                      13
                                                                                                                                      • fills = []
                                                                                                                                      • filled_qty = 0
                                                                                                                                      • (List.hd b.b_buys).o_is_implied
                                                                                                                                      • not (List.hd b.b_sells).o_is_implied
                                                                                                                                      • not ((List.hd b.b_buys).o_qty - (List.hd b.b_sells).o_qty = 0)
                                                                                                                                      • not ((List.hd b.b_buys).o_qty < (List.hd b.b_sells).o_qty)
                                                                                                                                      • (List.hd b.b_buys).o_price >= (List.hd b.b_sells).o_price
                                                                                                                                      • b.b_buys <> []
                                                                                                                                      • b.b_sells <> []
                                                                                                                                      let (_x_0 : order list) = b.b_buys in
                                                                                                                                      let (_x_1 : order) = List.hd _x_0 in
                                                                                                                                      let (_x_2 : order list) = b.b_sells in
                                                                                                                                      let (_x_3 : order) = List.hd _x_2 in
                                                                                                                                      let (_x_4 : int) = _x_3.o_qty in
                                                                                                                                      uncross_book
                                                                                                                                      {b_buys = {_x_1 with o_qty = _x_1.o_qty - _x_4} :: (List.tl _x_0);
                                                                                                                                       b_sells = List.tl _x_2}
                                                                                                                                      ({fill_client_id = _x_3.o_client_id; fill_qty = _x_4;
                                                                                                                                        fill_price = (_x_1.o_price + _x_3.o_price) / 2; fill_order_id = _x_3.o_id;
                                                                                                                                        fill_order_done = true}
                                                                                                                                       :: fills)
                                                                                                                                      (filled_qty + _x_4)
                                                                                                                                      12
                                                                                                                                      • fills = []
                                                                                                                                      • filled_qty = 0
                                                                                                                                      • not (List.hd b.b_buys).o_is_implied
                                                                                                                                      • not (List.hd b.b_sells).o_is_implied
                                                                                                                                      • not ((List.hd b.b_buys).o_qty - (List.hd b.b_sells).o_qty = 0)
                                                                                                                                      • not ((List.hd b.b_buys).o_qty < (List.hd b.b_sells).o_qty)
                                                                                                                                      • (List.hd b.b_buys).o_price >= (List.hd b.b_sells).o_price
                                                                                                                                      • b.b_buys <> []
                                                                                                                                      • b.b_sells <> []
                                                                                                                                      let (_x_0 : order list) = b.b_buys in
                                                                                                                                      let (_x_1 : order) = List.hd _x_0 in
                                                                                                                                      let (_x_2 : order list) = b.b_sells in
                                                                                                                                      let (_x_3 : order) = List.hd _x_2 in
                                                                                                                                      let (_x_4 : int) = _x_3.o_qty in
                                                                                                                                      let (_x_5 : int) = (_x_1.o_price + _x_3.o_price) / 2 in
                                                                                                                                      uncross_book
                                                                                                                                      {b_buys = {_x_1 with o_qty = _x_1.o_qty - _x_4} :: (List.tl _x_0);
                                                                                                                                       b_sells = List.tl _x_2}
                                                                                                                                      ({fill_client_id = _x_3.o_client_id; fill_qty = _x_4; fill_price = _x_5;
                                                                                                                                        fill_order_id = _x_3.o_id; fill_order_done = true}
                                                                                                                                       ::
                                                                                                                                       ({fill_client_id = _x_1.o_client_id; fill_qty = _x_4; fill_price = _x_5;
                                                                                                                                         fill_order_id = _x_1.o_id; fill_order_done = true}
                                                                                                                                        :: fills))
                                                                                                                                      (filled_qty + _x_4)
                                                                                                                                      11
                                                                                                                                      • fills = []
                                                                                                                                      • filled_qty = 0
                                                                                                                                      • (List.hd b.b_buys).o_is_implied
                                                                                                                                      • (List.hd b.b_sells).o_is_implied
                                                                                                                                      • (List.hd b.b_buys).o_qty - (List.hd b.b_sells).o_qty = 0
                                                                                                                                      • not ((List.hd b.b_buys).o_qty < (List.hd b.b_sells).o_qty)
                                                                                                                                      • (List.hd b.b_buys).o_price >= (List.hd b.b_sells).o_price
                                                                                                                                      • b.b_buys <> []
                                                                                                                                      • b.b_sells <> []
                                                                                                                                      let (_x_0 : order list) = b.b_sells in
                                                                                                                                      uncross_book {b_buys = List.tl b.b_buys; b_sells = List.tl _x_0} fills
                                                                                                                                      (filled_qty + (List.hd _x_0).o_qty)
                                                                                                                                      10
                                                                                                                                      • fills = []
                                                                                                                                      • filled_qty = 0
                                                                                                                                      • not (List.hd b.b_buys).o_is_implied
                                                                                                                                      • (List.hd b.b_sells).o_is_implied
                                                                                                                                      • (List.hd b.b_buys).o_qty - (List.hd b.b_sells).o_qty = 0
                                                                                                                                      • not ((List.hd b.b_buys).o_qty < (List.hd b.b_sells).o_qty)
                                                                                                                                      • (List.hd b.b_buys).o_price >= (List.hd b.b_sells).o_price
                                                                                                                                      • b.b_buys <> []
                                                                                                                                      • b.b_sells <> []
                                                                                                                                      let (_x_0 : order list) = b.b_buys in
                                                                                                                                      let (_x_1 : order list) = b.b_sells in
                                                                                                                                      let (_x_2 : order) = List.hd _x_0 in
                                                                                                                                      let (_x_3 : order) = List.hd _x_1 in
                                                                                                                                      let (_x_4 : int) = _x_3.o_qty in
                                                                                                                                      uncross_book {b_buys = List.tl _x_0; b_sells = List.tl _x_1}
                                                                                                                                      ({fill_client_id = _x_2.o_client_id; fill_qty = _x_4;
                                                                                                                                        fill_price = (_x_2.o_price + _x_3.o_price) / 2; fill_order_id = _x_2.o_id;
                                                                                                                                        fill_order_done = true}
                                                                                                                                       :: fills)
                                                                                                                                      (filled_qty + _x_4)
                                                                                                                                      9
                                                                                                                                      • fills = []
                                                                                                                                      • filled_qty = 0
                                                                                                                                      • (List.hd b.b_buys).o_is_implied
                                                                                                                                      • not (List.hd b.b_sells).o_is_implied
                                                                                                                                      • (List.hd b.b_buys).o_qty - (List.hd b.b_sells).o_qty = 0
                                                                                                                                      • not ((List.hd b.b_buys).o_qty < (List.hd b.b_sells).o_qty)
                                                                                                                                      • (List.hd b.b_buys).o_price >= (List.hd b.b_sells).o_price
                                                                                                                                      • b.b_buys <> []
                                                                                                                                      • b.b_sells <> []
                                                                                                                                      let (_x_0 : order list) = b.b_buys in
                                                                                                                                      let (_x_1 : order list) = b.b_sells in
                                                                                                                                      let (_x_2 : order) = List.hd _x_1 in
                                                                                                                                      let (_x_3 : int) = _x_2.o_qty in
                                                                                                                                      uncross_book {b_buys = List.tl _x_0; b_sells = List.tl _x_1}
                                                                                                                                      ({fill_client_id = _x_2.o_client_id; fill_qty = _x_3;
                                                                                                                                        fill_price = ((List.hd _x_0).o_price + _x_2.o_price) / 2;
                                                                                                                                        fill_order_id = _x_2.o_id; fill_order_done = true}
                                                                                                                                       :: fills)
                                                                                                                                      (filled_qty + _x_3)
                                                                                                                                      8
                                                                                                                                      • fills = []
                                                                                                                                      • filled_qty = 0
                                                                                                                                      • not (List.hd b.b_buys).o_is_implied
                                                                                                                                      • not (List.hd b.b_sells).o_is_implied
                                                                                                                                      • (List.hd b.b_buys).o_qty - (List.hd b.b_sells).o_qty = 0
                                                                                                                                      • not ((List.hd b.b_buys).o_qty < (List.hd b.b_sells).o_qty)
                                                                                                                                      • (List.hd b.b_buys).o_price >= (List.hd b.b_sells).o_price
                                                                                                                                      • b.b_buys <> []
                                                                                                                                      • b.b_sells <> []
                                                                                                                                      let (_x_0 : order list) = b.b_buys in
                                                                                                                                      let (_x_1 : order list) = b.b_sells in
                                                                                                                                      let (_x_2 : order) = List.hd _x_1 in
                                                                                                                                      let (_x_3 : int) = _x_2.o_qty in
                                                                                                                                      let (_x_4 : order) = List.hd _x_0 in
                                                                                                                                      let (_x_5 : int) = (_x_4.o_price + _x_2.o_price) / 2 in
                                                                                                                                      uncross_book {b_buys = List.tl _x_0; b_sells = List.tl _x_1}
                                                                                                                                      ({fill_client_id = _x_2.o_client_id; fill_qty = _x_3; fill_price = _x_5;
                                                                                                                                        fill_order_id = _x_2.o_id; fill_order_done = true}
                                                                                                                                       ::
                                                                                                                                       ({fill_client_id = _x_4.o_client_id; fill_qty = _x_3; fill_price = _x_5;
                                                                                                                                         fill_order_id = _x_4.o_id; fill_order_done = true}
                                                                                                                                        :: fills))
                                                                                                                                      (filled_qty + _x_3)
                                                                                                                                      7
                                                                                                                                      • fills = []
                                                                                                                                      • filled_qty = 0
                                                                                                                                      • (List.hd b.b_buys).o_is_implied
                                                                                                                                      • (List.hd b.b_sells).o_is_implied
                                                                                                                                      • not ((List.hd b.b_sells).o_qty - (List.hd b.b_buys).o_qty = 0)
                                                                                                                                      • (List.hd b.b_buys).o_qty < (List.hd b.b_sells).o_qty
                                                                                                                                      • (List.hd b.b_buys).o_price >= (List.hd b.b_sells).o_price
                                                                                                                                      • b.b_buys <> []
                                                                                                                                      • b.b_sells <> []
                                                                                                                                      let (_x_0 : order list) = b.b_buys in
                                                                                                                                      let (_x_1 : order list) = b.b_sells in
                                                                                                                                      let (_x_2 : order) = List.hd _x_1 in
                                                                                                                                      let (_x_3 : int) = (List.hd _x_0).o_qty in
                                                                                                                                      uncross_book
                                                                                                                                      {b_buys = List.tl _x_0;
                                                                                                                                       b_sells = {_x_2 with o_qty = _x_2.o_qty - _x_3} :: (List.tl _x_1)}
                                                                                                                                      fills (filled_qty + _x_3)
                                                                                                                                      6
                                                                                                                                      • fills = []
                                                                                                                                      • filled_qty = 0
                                                                                                                                      • not (List.hd b.b_buys).o_is_implied
                                                                                                                                      • (List.hd b.b_sells).o_is_implied
                                                                                                                                      • not ((List.hd b.b_sells).o_qty - (List.hd b.b_buys).o_qty = 0)
                                                                                                                                      • (List.hd b.b_buys).o_qty < (List.hd b.b_sells).o_qty
                                                                                                                                      • (List.hd b.b_buys).o_price >= (List.hd b.b_sells).o_price
                                                                                                                                      • b.b_buys <> []
                                                                                                                                      • b.b_sells <> []
                                                                                                                                      let (_x_0 : order list) = b.b_buys in
                                                                                                                                      let (_x_1 : order list) = b.b_sells in
                                                                                                                                      let (_x_2 : order) = List.hd _x_1 in
                                                                                                                                      let (_x_3 : order) = List.hd _x_0 in
                                                                                                                                      let (_x_4 : int) = _x_3.o_qty in
                                                                                                                                      uncross_book
                                                                                                                                      {b_buys = List.tl _x_0;
                                                                                                                                       b_sells = {_x_2 with o_qty = _x_2.o_qty - _x_4} :: (List.tl _x_1)}
                                                                                                                                      ({fill_client_id = _x_3.o_client_id; fill_qty = _x_4;
                                                                                                                                        fill_price = (_x_3.o_price + _x_2.o_price) / 2; fill_order_id = _x_3.o_id;
                                                                                                                                        fill_order_done = true}
                                                                                                                                       :: fills)
                                                                                                                                      (filled_qty + _x_4)
                                                                                                                                      5
                                                                                                                                      • fills = []
                                                                                                                                      • filled_qty = 0
                                                                                                                                      • (List.hd b.b_buys).o_is_implied
                                                                                                                                      • not (List.hd b.b_sells).o_is_implied
                                                                                                                                      • not ((List.hd b.b_sells).o_qty - (List.hd b.b_buys).o_qty = 0)
                                                                                                                                      • (List.hd b.b_buys).o_qty < (List.hd b.b_sells).o_qty
                                                                                                                                      • (List.hd b.b_buys).o_price >= (List.hd b.b_sells).o_price
                                                                                                                                      • b.b_buys <> []
                                                                                                                                      • b.b_sells <> []
                                                                                                                                      let (_x_0 : order list) = b.b_buys in
                                                                                                                                      let (_x_1 : order list) = b.b_sells in
                                                                                                                                      let (_x_2 : order) = List.hd _x_1 in
                                                                                                                                      let (_x_3 : order) = List.hd _x_0 in
                                                                                                                                      let (_x_4 : int) = _x_3.o_qty in
                                                                                                                                      uncross_book
                                                                                                                                      {b_buys = List.tl _x_0;
                                                                                                                                       b_sells = {_x_2 with o_qty = _x_2.o_qty - _x_4} :: (List.tl _x_1)}
                                                                                                                                      ({fill_client_id = _x_2.o_client_id; fill_qty = _x_4;
                                                                                                                                        fill_price = (_x_3.o_price + _x_2.o_price) / 2; fill_order_id = _x_2.o_id;
                                                                                                                                        fill_order_done = true}
                                                                                                                                       :: fills)
                                                                                                                                      (filled_qty + _x_4)
                                                                                                                                      4
                                                                                                                                      • fills = []
                                                                                                                                      • filled_qty = 0
                                                                                                                                      • not (List.hd b.b_buys).o_is_implied
                                                                                                                                      • not (List.hd b.b_sells).o_is_implied
                                                                                                                                      • not ((List.hd b.b_sells).o_qty - (List.hd b.b_buys).o_qty = 0)
                                                                                                                                      • (List.hd b.b_buys).o_qty < (List.hd b.b_sells).o_qty
                                                                                                                                      • (List.hd b.b_buys).o_price >= (List.hd b.b_sells).o_price
                                                                                                                                      • b.b_buys <> []
                                                                                                                                      • b.b_sells <> []
                                                                                                                                      let (_x_0 : order list) = b.b_buys in
                                                                                                                                      let (_x_1 : order list) = b.b_sells in
                                                                                                                                      let (_x_2 : order) = List.hd _x_1 in
                                                                                                                                      let (_x_3 : order) = List.hd _x_0 in
                                                                                                                                      let (_x_4 : int) = _x_3.o_qty in
                                                                                                                                      let (_x_5 : int) = (_x_3.o_price + _x_2.o_price) / 2 in
                                                                                                                                      uncross_book
                                                                                                                                      {b_buys = List.tl _x_0;
                                                                                                                                       b_sells = {_x_2 with o_qty = _x_2.o_qty - _x_4} :: (List.tl _x_1)}
                                                                                                                                      ({fill_client_id = _x_2.o_client_id; fill_qty = _x_4; fill_price = _x_5;
                                                                                                                                        fill_order_id = _x_2.o_id; fill_order_done = true}
                                                                                                                                       ::
                                                                                                                                       ({fill_client_id = _x_3.o_client_id; fill_qty = _x_4; fill_price = _x_5;
                                                                                                                                         fill_order_id = _x_3.o_id; fill_order_done = true}
                                                                                                                                        :: fills))
                                                                                                                                      (filled_qty + _x_4)
                                                                                                                                      In [10]:
                                                                                                                                      (* Now let's try to generate some test cases *)
                                                                                                                                      
                                                                                                                                      (* This will auto-generate model extractor *)
                                                                                                                                      Extract.eval ~quiet:true ~signature:(Event.DB.fun_id_of_str (db()) "uncross_book") ();;
                                                                                                                                      
                                                                                                                                      #remove_doc doc_of_book;;
                                                                                                                                      #remove_doc doc_of_order;;
                                                                                                                                      Modular_decomp.get_regions d |> CCList.map (fun r -> r |> Modular_decomp.get_model |> Mex.of_model);;
                                                                                                                                      #install_doc doc_of_order;;
                                                                                                                                      #install_doc doc_of_book;;
                                                                                                                                      
                                                                                                                                      Out[10]:
                                                                                                                                                                          - : unit
                                                                                                                                      = ()
                                                                                                                                      - : Mex.extract_type list =
                                                                                                                                      [{Mex.b =
                                                                                                                                         {b_buys =
                                                                                                                                           [{o_qty = 2; o_price = 3; o_time = 4; o_id = 5; o_side = BUY;
                                                                                                                                             o_client_id = 6; o_inst = Strategy STRAT1; o_is_implied = false}];
                                                                                                                                          b_sells = []};
                                                                                                                                        fills = []; filled_qty = 0};
                                                                                                                                       {Mex.b = {b_buys = []; b_sells = []}; fills = []; filled_qty = 0};
                                                                                                                                       {Mex.b =
                                                                                                                                         {b_buys = [];
                                                                                                                                          b_sells =
                                                                                                                                           [{o_qty = 5; o_price = 6; o_time = 2; o_id = 3; o_side = BUY;
                                                                                                                                             o_client_id = 4; o_inst = Strategy STRAT1; o_is_implied = false}]};
                                                                                                                                        fills = []; filled_qty = 0};
                                                                                                                                       {Mex.b =
                                                                                                                                         {b_buys =
                                                                                                                                           [{o_qty = 6; o_price = 0; o_time = 7; o_id = 8; o_side = BUY;
                                                                                                                                             o_client_id = 9; o_inst = Strategy STRAT1; o_is_implied = false}];
                                                                                                                                          b_sells =
                                                                                                                                           [{o_qty = 3; o_price = 1; o_time = 4; o_id = 2; o_side = BUY;
                                                                                                                                             o_client_id = 5; o_inst = Strategy STRAT1; o_is_implied = false}]};
                                                                                                                                        fills = []; filled_qty = 0};
                                                                                                                                       {Mex.b =
                                                                                                                                         {b_buys =
                                                                                                                                           [{o_qty = 0; o_price = 21238; o_time = 4; o_id = 2; o_side = BUY;
                                                                                                                                             o_client_id = 3; o_inst = Strategy STRAT1; o_is_implied = true}];
                                                                                                                                          b_sells =
                                                                                                                                           [{o_qty = -1; o_price = -7719; o_time = 5; o_id = 7; o_side = BUY;
                                                                                                                                             o_client_id = 6; o_inst = Strategy STRAT1; o_is_implied = true}]};
                                                                                                                                        fills = []; filled_qty = 0};
                                                                                                                                       {Mex.b =
                                                                                                                                         {b_buys =
                                                                                                                                           [{o_qty = 0; o_price = 21238; o_time = 2; o_id = 3; o_side = BUY;
                                                                                                                                             o_client_id = 4; o_inst = Strategy STRAT1; o_is_implied = false}];
                                                                                                                                          b_sells =
                                                                                                                                           [{o_qty = -1; o_price = -7719; o_time = 6; o_id = 5; o_side = BUY;
                                                                                                                                             o_client_id = 7; o_inst = Strategy STRAT1; o_is_implied = true}]};
                                                                                                                                        fills = []; filled_qty = 0};
                                                                                                                                       {Mex.b =
                                                                                                                                         {b_buys =
                                                                                                                                           [{o_qty = 0; o_price = 21238; o_time = 3; o_id = 4; o_side = BUY;
                                                                                                                                             o_client_id = 2; o_inst = Strategy STRAT1; o_is_implied = true}];
                                                                                                                                          b_sells =
                                                                                                                                           [{o_qty = -1; o_price = -7719; o_time = 5; o_id = 6; o_side = BUY;
                                                                                                                                             o_client_id = 7; o_inst = Strategy STRAT1; o_is_implied = false}]};
                                                                                                                                        fills = []; filled_qty = 0};
                                                                                                                                       {Mex.b =
                                                                                                                                         {b_buys =
                                                                                                                                           [{o_qty = 0; o_price = 21238; o_time = 2; o_id = 3; o_side = BUY;
                                                                                                                                             o_client_id = 4; o_inst = Strategy STRAT1; o_is_implied = false}];
                                                                                                                                          b_sells =
                                                                                                                                           [{o_qty = -1; o_price = -7719; o_time = 5; o_id = 6; o_side = BUY;
                                                                                                                                             o_client_id = 7; o_inst = Strategy STRAT1; o_is_implied = false}]};
                                                                                                                                        fills = []; filled_qty = 0};
                                                                                                                                       {Mex.b =
                                                                                                                                         {b_buys =
                                                                                                                                           [{o_qty = 0; o_price = 7719; o_time = 2; o_id = 3; o_side = BUY;
                                                                                                                                             o_client_id = 4; o_inst = Strategy STRAT1; o_is_implied = true}];
                                                                                                                                          b_sells =
                                                                                                                                           [{o_qty = 0; o_price = -38; o_time = 5; o_id = 6; o_side = BUY;
                                                                                                                                             o_client_id = 7; o_inst = Strategy STRAT1; o_is_implied = true}]};
                                                                                                                                        fills = []; filled_qty = 0};
                                                                                                                                       {Mex.b =
                                                                                                                                         {b_buys =
                                                                                                                                           [{o_qty = 0; o_price = 7719; o_time = 2; o_id = 3; o_side = BUY;
                                                                                                                                             o_client_id = 4; o_inst = Strategy STRAT1; o_is_implied = false}];
                                                                                                                                          b_sells =
                                                                                                                                           [{o_qty = 0; o_price = -38; o_time = 5; o_id = 6; o_side = BUY;
                                                                                                                                             o_client_id = 7; o_inst = Strategy STRAT1; o_is_implied = true}]};
                                                                                                                                        fills = []; filled_qty = 0};
                                                                                                                                       {Mex.b =
                                                                                                                                         {b_buys =
                                                                                                                                           [{o_qty = 0; o_price = 7719; o_time = 2; o_id = 3; o_side = BUY;
                                                                                                                                             o_client_id = 4; o_inst = Strategy STRAT1; o_is_implied = true}];
                                                                                                                                          b_sells =
                                                                                                                                           [{o_qty = 0; o_price = -38; o_time = 5; o_id = 6; o_side = BUY;
                                                                                                                                             o_client_id = 7; o_inst = Strategy STRAT1; o_is_implied = false}]};
                                                                                                                                        fills = []; filled_qty = 0};
                                                                                                                                       {Mex.b =
                                                                                                                                         {b_buys =
                                                                                                                                           [{o_qty = 0; o_price = 7719; o_time = 3; o_id = 4; o_side = BUY;
                                                                                                                                             o_client_id = 2; o_inst = Strategy STRAT1; o_is_implied = false}];
                                                                                                                                          b_sells =
                                                                                                                                           [{o_qty = 0; o_price = -38; o_time = 5; o_id = 6; o_side = BUY;
                                                                                                                                             o_client_id = 7; o_inst = Strategy STRAT1; o_is_implied = false}]};
                                                                                                                                        fills = []; filled_qty = 0};
                                                                                                                                       {Mex.b =
                                                                                                                                         {b_buys =
                                                                                                                                           [{o_qty = 0; o_price = 21238; o_time = 2; o_id = 3; o_side = BUY;
                                                                                                                                             o_client_id = 4; o_inst = Strategy STRAT1; o_is_implied = true}];
                                                                                                                                          b_sells =
                                                                                                                                           [{o_qty = 1; o_price = -7719; o_time = 7; o_id = 5; o_side = BUY;
                                                                                                                                             o_client_id = 6; o_inst = Strategy STRAT1; o_is_implied = true}]};
                                                                                                                                        fills = []; filled_qty = 0};{Mex.b = ...; fills = ...; filled_qty = ...};
                                                                                                                                       ...;...]
                                                                                                                                      

                                                                                                                                      3 Implied trading

                                                                                                                                      3.1 Strategy ranking

                                                                                                                                      When generating implied orders for strategies, there's a criteria used to rank strategies - this section encodes the comparison function.

                                                                                                                                      In [11]:
                                                                                                                                      (* Calculate somehow how big the ratio is *)
                                                                                                                                      let leg_ratio (s : strategy) =
                                                                                                                                        let abs x = if x < 0 then -x else x in
                                                                                                                                        (abs s.leg1.leg_mult) + (abs s.leg2.leg_mult) + (abs s.leg3.leg_mult)
                                                                                                                                      ;;
                                                                                                                                      
                                                                                                                                      (* Nearest time to expiry *)
                                                                                                                                      let nearest_time_to_exp (s : strategy) =
                                                                                                                                        let exp =
                                                                                                                                          if (month_to_int (contract_expiry s.leg1.leg_sec_idx)) < (month_to_int (contract_expiry s.leg2.leg_sec_idx)) then
                                                                                                                                            contract_expiry s.leg1.leg_sec_idx
                                                                                                                                          else
                                                                                                                                            contract_expiry s.leg2.leg_sec_idx in
                                                                                                                                      
                                                                                                                                        if (month_to_int exp) < (month_to_int (contract_expiry s.leg2.leg_sec_idx)) then
                                                                                                                                          exp
                                                                                                                                        else
                                                                                                                                          contract_expiry s.leg2.leg_sec_idx
                                                                                                                                      ;;
                                                                                                                                      
                                                                                                                                      (* Return true if s1 should implied uncross before s2 *)
                                                                                                                                      let priority_strat (s1 : strategy) (s2 : strategy) =
                                                                                                                                        (*
                                                                                                                                          1. time to expiry of the nearest leg
                                                                                                                                          2. strategy types (strategies with the greater leg ratio executed first)
                                                                                                                                          3. strategy creation times *)
                                                                                                                                        if (month_to_int (nearest_time_to_exp s1)) < (month_to_int (nearest_time_to_exp s2)) then
                                                                                                                                          true
                                                                                                                                        else
                                                                                                                                          if (leg_ratio s1) > (leg_ratio s2) then
                                                                                                                                            true
                                                                                                                                          else
                                                                                                                                            s1.time_created <= s2.time_created
                                                                                                                                      
                                                                                                                                      Out[11]:
                                                                                                                                      val leg_ratio : strategy -> Z.t = <fun>
                                                                                                                                      val nearest_time_to_exp : strategy -> month = <fun>
                                                                                                                                      val priority_strat : strategy -> strategy -> bool = <fun>
                                                                                                                                      
                                                                                                                                      In [12]:
                                                                                                                                      let transitivity s1 s2 s3 =
                                                                                                                                       ((priority_strat s1 s2) && (priority_strat s2 s3)) ==> (priority_strat s1 s3)
                                                                                                                                      
                                                                                                                                      verify transitivity
                                                                                                                                      
                                                                                                                                      Out[12]:
                                                                                                                                      val transitivity : strategy -> strategy -> strategy -> bool = <fun>
                                                                                                                                      - : strategy -> strategy -> strategy -> bool = <fun>
                                                                                                                                      module CX : sig val s1 : strategy val s2 : strategy val s3 : strategy end
                                                                                                                                      
                                                                                                                                      Counterexample (after 0 steps, 0.056s):
                                                                                                                                      let s1 : strategy =
                                                                                                                                        let (_x_0 : leg) = {leg_sec_idx = OUT1; leg_mult = 0} in
                                                                                                                                        {time_created = 0; leg1 = _x_0; leg2 = {leg_sec_idx = OUT2; leg_mult = 1};
                                                                                                                                         leg3 = _x_0}
                                                                                                                                      let s2 : strategy =
                                                                                                                                        let (_x_0 : leg) = {leg_sec_idx = OUT1; leg_mult = 0} in
                                                                                                                                        {time_created = (-14681); leg1 = _x_0;
                                                                                                                                         leg2 = {leg_sec_idx = OUT3; leg_mult = 0}; leg3 = _x_0}
                                                                                                                                      let s3 : strategy =
                                                                                                                                        {time_created = (-1); leg1 = {leg_sec_idx = OUT1; leg_mult = 0};
                                                                                                                                         leg2 = {leg_sec_idx = OUT3; leg_mult = 0};
                                                                                                                                         leg3 = {leg_sec_idx = OUT1; leg_mult = 1}}
                                                                                                                                      
                                                                                                                                      Refuted
                                                                                                                                      proof attempt
                                                                                                                                      ground_instances:0
                                                                                                                                      definitions:0
                                                                                                                                      inductions:0
                                                                                                                                      search_time:
                                                                                                                                      0.056s
                                                                                                                                      details:
                                                                                                                                      Expand
                                                                                                                                      smt_stats:
                                                                                                                                      num checks:1
                                                                                                                                      arith-assume-eqs:8
                                                                                                                                      arith-make-feasible:299
                                                                                                                                      arith-max-columns:76
                                                                                                                                      arith-conflicts:3
                                                                                                                                      rlimit count:21452
                                                                                                                                      arith-cheap-eqs:34
                                                                                                                                      mk clause:469
                                                                                                                                      datatype occurs check:24
                                                                                                                                      mk bool var:683
                                                                                                                                      arith-lower:217
                                                                                                                                      arith-diseq:11
                                                                                                                                      datatype splits:36
                                                                                                                                      decisions:614
                                                                                                                                      arith-propagations:31
                                                                                                                                      propagations:752
                                                                                                                                      interface eqs:8
                                                                                                                                      arith-bound-propagations-cheap:31
                                                                                                                                      arith-max-rows:38
                                                                                                                                      conflicts:26
                                                                                                                                      datatype accessor ax:15
                                                                                                                                      minimized lits:2
                                                                                                                                      arith-bound-propagations-lp:7
                                                                                                                                      datatype constructor ax:110
                                                                                                                                      num allocs:1068365636
                                                                                                                                      final checks:9
                                                                                                                                      added eqs:953
                                                                                                                                      del clause:190
                                                                                                                                      arith eq adapter:187
                                                                                                                                      arith-upper:304
                                                                                                                                      time:0.027000
                                                                                                                                      memory:21.820000
                                                                                                                                      max memory:31.410000
                                                                                                                                      Expand
                                                                                                                                      • start[0.056s]
                                                                                                                                          let (_x_0 : int) = ( :var_0: ).time_created in
                                                                                                                                          let (_x_1 : int) = ( :var_1: ).time_created in
                                                                                                                                          let (_x_2 : leg) = ( :var_0: ).leg1 in
                                                                                                                                          let (_x_3 : int) = _x_2.leg_mult in
                                                                                                                                          let (_x_4 : leg) = ( :var_0: ).leg2 in
                                                                                                                                          let (_x_5 : int) = _x_4.leg_mult in
                                                                                                                                          let (_x_6 : int) = ( :var_0: ).leg3.leg_mult in
                                                                                                                                          let (_x_7 : int)
                                                                                                                                              = (if _x_3 < 0 then ~- _x_3 else _x_3)
                                                                                                                                                + (if _x_5 < 0 then ~- _x_5 else _x_5)
                                                                                                                                                + (if _x_6 < 0 then ~- _x_6 else _x_6)
                                                                                                                                          in
                                                                                                                                          let (_x_8 : leg) = ( :var_1: ).leg1 in
                                                                                                                                          let (_x_9 : int) = _x_8.leg_mult in
                                                                                                                                          let (_x_10 : leg) = ( :var_1: ).leg2 in
                                                                                                                                          let (_x_11 : int) = _x_10.leg_mult in
                                                                                                                                          let (_x_12 : int) = ( :var_1: ).leg3.leg_mult in
                                                                                                                                          let (_x_13 : int)
                                                                                                                                              = (if _x_9 < 0 then ~- _x_9 else _x_9)
                                                                                                                                                + (if _x_11 < 0 then ~- _x_11 else _x_11)
                                                                                                                                                + (if _x_12 < 0 then ~- _x_12 else _x_12)
                                                                                                                                          in
                                                                                                                                          let (_x_14 : outright_id) = _x_4.leg_sec_idx in
                                                                                                                                          let (_x_15 : bool) = _x_14 = OUT1 in
                                                                                                                                          let (_x_16 : outright_id) = _x_2.leg_sec_idx in
                                                                                                                                          let (_x_17 : bool) = _x_16 = OUT1 in
                                                                                                                                          let (_x_18 : month)
                                                                                                                                              = if _x_17 then Mar else if _x_16 = OUT2 then Jun else Sep
                                                                                                                                          in
                                                                                                                                          let (_x_19 : month)
                                                                                                                                              = if _x_15 then Mar else if _x_14 = OUT2 then Jun else Sep
                                                                                                                                          in
                                                                                                                                          let (_x_20 : int)
                                                                                                                                              = if _x_19 = Mar then 3
                                                                                                                                                else if _x_19 = Jun then 6 else if _x_19 = Sep then 9 else 12
                                                                                                                                          in
                                                                                                                                          let (_x_21 : bool)
                                                                                                                                              = (if _x_18 = Mar then 3
                                                                                                                                                 else if _x_18 = Jun then 6 else if _x_18 = Sep then 9 else 12)
                                                                                                                                                < _x_20
                                                                                                                                          in
                                                                                                                                          let (_x_22 : month) = if _x_21 then _x_18 else _x_19 in
                                                                                                                                          let (_x_23 : bool)
                                                                                                                                              = (if _x_22 = Mar then 3
                                                                                                                                                 else
                                                                                                                                                 if _x_22 = Jun then 6
                                                                                                                                                 else
                                                                                                                                                 if (if _x_21 then if _x_17 then Mar else …
                                                                                                                                                     else if _x_15 then Mar else …)
                                                                                                                                                    = Sep
                                                                                                                                                 then 9 else 12)
                                                                                                                                                < _x_20
                                                                                                                                          in
                                                                                                                                          let (_x_24 : int)
                                                                                                                                              = if (if _x_23 then _x_22 else _x_19) = Mar then 3
                                                                                                                                                else
                                                                                                                                                if (if _x_23
                                                                                                                                                    then
                                                                                                                                                      if _x_21 then if _x_17 then Mar else …
                                                                                                                                                      else if _x_15 then Mar else …
                                                                                                                                                    else _x_19)
                                                                                                                                                   = Jun
                                                                                                                                                then 6
                                                                                                                                                else
                                                                                                                                                if (if _x_23 then if _x_21 then … else …
                                                                                                                                                    else if _x_15 then Mar else …)
                                                                                                                                                   = Sep
                                                                                                                                                then 9 else 12
                                                                                                                                          in
                                                                                                                                          let (_x_25 : outright_id) = _x_10.leg_sec_idx in
                                                                                                                                          let (_x_26 : bool) = _x_25 = OUT1 in
                                                                                                                                          let (_x_27 : outright_id) = _x_8.leg_sec_idx in
                                                                                                                                          let (_x_28 : bool) = _x_27 = OUT1 in
                                                                                                                                          let (_x_29 : month)
                                                                                                                                              = if _x_28 then Mar else if _x_27 = OUT2 then Jun else Sep
                                                                                                                                          in
                                                                                                                                          let (_x_30 : month)
                                                                                                                                              = if _x_26 then Mar else if _x_25 = OUT2 then Jun else Sep
                                                                                                                                          in
                                                                                                                                          let (_x_31 : int)
                                                                                                                                              = if _x_30 = Mar then 3
                                                                                                                                                else if _x_30 = Jun then 6 else if _x_30 = Sep then 9 else 12
                                                                                                                                          in
                                                                                                                                          let (_x_32 : bool)
                                                                                                                                              = (if _x_29 = Mar then 3
                                                                                                                                                 else if _x_29 = Jun then 6 else if _x_29 = Sep then 9 else 12)
                                                                                                                                                < _x_31
                                                                                                                                          in
                                                                                                                                          let (_x_33 : month) = if _x_32 then _x_29 else _x_30 in
                                                                                                                                          let (_x_34 : bool)
                                                                                                                                              = (if _x_33 = Mar then 3
                                                                                                                                                 else
                                                                                                                                                 if _x_33 = Jun then 6
                                                                                                                                                 else
                                                                                                                                                 if (if _x_32 then if _x_28 then Mar else …
                                                                                                                                                     else if _x_26 then Mar else …)
                                                                                                                                                    = Sep
                                                                                                                                                 then 9 else 12)
                                                                                                                                                < _x_31
                                                                                                                                          in
                                                                                                                                          let (_x_35 : int)
                                                                                                                                              = if (if _x_34 then _x_33 else _x_30) = Mar then 3
                                                                                                                                                else
                                                                                                                                                if (if _x_34
                                                                                                                                                    then
                                                                                                                                                      if _x_32 then if _x_28 then Mar else …
                                                                                                                                                      else if _x_26 then Mar else …
                                                                                                                                                    else _x_30)
                                                                                                                                                   = Jun
                                                                                                                                                then 6
                                                                                                                                                else
                                                                                                                                                if (if _x_34 then if _x_32 then … else …
                                                                                                                                                    else if _x_26 then Mar else …)
                                                                                                                                                   = Sep
                                                                                                                                                then 9 else 12
                                                                                                                                          in
                                                                                                                                          let (_x_36 : int) = ( :var_2: ).time_created in
                                                                                                                                          let (_x_37 : leg) = ( :var_2: ).leg1 in
                                                                                                                                          let (_x_38 : int) = _x_37.leg_mult in
                                                                                                                                          let (_x_39 : leg) = ( :var_2: ).leg2 in
                                                                                                                                          let (_x_40 : int) = _x_39.leg_mult in
                                                                                                                                          let (_x_41 : int) = ( :var_2: ).leg3.leg_mult in
                                                                                                                                          let (_x_42 : int)
                                                                                                                                              = (if _x_38 < 0 then ~- _x_38 else _x_38)
                                                                                                                                                + (if _x_40 < 0 then ~- _x_40 else _x_40)
                                                                                                                                                + (if _x_41 < 0 then ~- _x_41 else _x_41)
                                                                                                                                          in
                                                                                                                                          let (_x_43 : outright_id) = _x_39.leg_sec_idx in
                                                                                                                                          let (_x_44 : bool) = _x_43 = OUT1 in
                                                                                                                                          let (_x_45 : outright_id) = _x_37.leg_sec_idx in
                                                                                                                                          let (_x_46 : bool) = _x_45 = OUT1 in
                                                                                                                                          let (_x_47 : month)
                                                                                                                                              = if _x_46 then Mar else if _x_45 = OUT2 then Jun else Sep
                                                                                                                                          in
                                                                                                                                          let (_x_48 : month)
                                                                                                                                              = if _x_44 then Mar else if _x_43 = OUT2 then Jun else Sep
                                                                                                                                          in
                                                                                                                                          let (_x_49 : int)
                                                                                                                                              = if _x_48 = Mar then 3
                                                                                                                                                else if _x_48 = Jun then 6 else if _x_48 = Sep then 9 else 12
                                                                                                                                          in
                                                                                                                                          let (_x_50 : bool)
                                                                                                                                              = (if _x_47 = Mar then 3
                                                                                                                                                 else if _x_47 = Jun then 6 else if _x_47 = Sep then 9 else 12)
                                                                                                                                                < _x_49
                                                                                                                                          in
                                                                                                                                          let (_x_51 : month) = if _x_50 then _x_47 else _x_48 in
                                                                                                                                          let (_x_52 : bool)
                                                                                                                                              = (if _x_51 = Mar then 3
                                                                                                                                                 else
                                                                                                                                                 if _x_51 = Jun then 6
                                                                                                                                                 else
                                                                                                                                                 if (if _x_50 then if _x_46 then Mar else …
                                                                                                                                                     else if _x_44 then Mar else …)
                                                                                                                                                    = Sep
                                                                                                                                                 then 9 else 12)
                                                                                                                                                < _x_49
                                                                                                                                          in
                                                                                                                                          let (_x_53 : int)
                                                                                                                                              = if (if _x_52 then _x_51 else _x_48) = Mar then 3
                                                                                                                                                else
                                                                                                                                                if (if _x_52
                                                                                                                                                    then
                                                                                                                                                      if _x_50 then if _x_46 then Mar else …
                                                                                                                                                      else if _x_44 then Mar else …
                                                                                                                                                    else _x_48)
                                                                                                                                                   = Jun
                                                                                                                                                then 6
                                                                                                                                                else
                                                                                                                                                if (if _x_52 then if _x_50 then … else …
                                                                                                                                                    else if _x_44 then Mar else …)
                                                                                                                                                   = Sep
                                                                                                                                                then 9 else 12
                                                                                                                                          in
                                                                                                                                          (if _x_24 < _x_35 then true
                                                                                                                                           else if _x_7 > _x_13 then true else _x_0 <= _x_1)
                                                                                                                                          && (if _x_35 < _x_53 then true
                                                                                                                                              else if _x_13 > _x_42 then true else _x_1 <= _x_36)
                                                                                                                                          ==> (if _x_24 < _x_53 then true
                                                                                                                                               else if _x_7 > _x_42 then true else _x_0 <= _x_36)
                                                                                                                                      • simplify

                                                                                                                                        into:
                                                                                                                                        let (_x_0 : int) = ( :var_0: ).time_created in
                                                                                                                                        let (_x_1 : int) = ( :var_2: ).time_created in
                                                                                                                                        let (_x_2 : leg) = ( :var_2: ).leg1 in
                                                                                                                                        let (_x_3 : outright_id) = _x_2.leg_sec_idx in
                                                                                                                                        let (_x_4 : bool) = _x_3 = OUT1 in
                                                                                                                                        let (_x_5 : leg) = ( :var_2: ).leg2 in
                                                                                                                                        let (_x_6 : outright_id) = _x_5.leg_sec_idx in
                                                                                                                                        let (_x_7 : bool) = _x_6 = OUT1 in
                                                                                                                                        let (_x_8 : month) = if _x_7 then Mar else if _x_6 = OUT2 then Jun else Sep
                                                                                                                                        in
                                                                                                                                        let (_x_9 : int)
                                                                                                                                            = if _x_8 = Mar then 3
                                                                                                                                              else if _x_8 = Jun then 6 else if _x_8 = Sep then 9 else 12
                                                                                                                                        in
                                                                                                                                        let (_x_10 : month) = if _x_4 then Mar else if _x_3 = OUT2 then Jun else Sep
                                                                                                                                        in
                                                                                                                                        let (_x_11 : bool)
                                                                                                                                            = _x_9 <=
                                                                                                                                              (if _x_10 = Mar then 3
                                                                                                                                               else if _x_10 = Jun then 6 else if _x_10 = Sep then 9 else 12)
                                                                                                                                        in
                                                                                                                                        let (_x_12 : month) = if _x_11 then _x_8 else _x_10 in
                                                                                                                                        let (_x_13 : bool)
                                                                                                                                            = _x_11
                                                                                                                                              || _x_9 <=
                                                                                                                                                 (if _x_12 = Mar then 3
                                                                                                                                                  else
                                                                                                                                                  if _x_12 = Jun then 6
                                                                                                                                                  else
                                                                                                                                                  if (if _x_11 then if _x_7 then Mar else …
                                                                                                                                                      else if _x_4 then Mar else …)
                                                                                                                                                     = Sep
                                                                                                                                                  then 9 else 12)
                                                                                                                                        in
                                                                                                                                        let (_x_14 : month) = if _x_13 then _x_8 else _x_10 in
                                                                                                                                        let (_x_15 : int)
                                                                                                                                            = if _x_14 = Mar then 3
                                                                                                                                              else
                                                                                                                                              if _x_14 = Jun then 6
                                                                                                                                              else
                                                                                                                                              if (if _x_13 then if _x_7 then Mar else …
                                                                                                                                                  else if _x_4 then Mar else …)
                                                                                                                                                 = Sep
                                                                                                                                              then 9 else 12
                                                                                                                                        in
                                                                                                                                        let (_x_16 : leg) = ( :var_0: ).leg1 in
                                                                                                                                        let (_x_17 : outright_id) = _x_16.leg_sec_idx in
                                                                                                                                        let (_x_18 : bool) = _x_17 = OUT1 in
                                                                                                                                        let (_x_19 : leg) = ( :var_0: ).leg2 in
                                                                                                                                        let (_x_20 : outright_id) = _x_19.leg_sec_idx in
                                                                                                                                        let (_x_21 : bool) = _x_20 = OUT1 in
                                                                                                                                        let (_x_22 : month)
                                                                                                                                            = if _x_21 then Mar else if _x_20 = OUT2 then Jun else Sep
                                                                                                                                        in
                                                                                                                                        let (_x_23 : int)
                                                                                                                                            = if _x_22 = Mar then 3
                                                                                                                                              else if _x_22 = Jun then 6 else if _x_22 = Sep then 9 else 12
                                                                                                                                        in
                                                                                                                                        let (_x_24 : month)
                                                                                                                                            = if _x_18 then Mar else if _x_17 = OUT2 then Jun else Sep
                                                                                                                                        in
                                                                                                                                        let (_x_25 : bool)
                                                                                                                                            = _x_23 <=
                                                                                                                                              (if _x_24 = Mar then 3
                                                                                                                                               else if _x_24 = Jun then 6 else if _x_24 = Sep then 9 else 12)
                                                                                                                                        in
                                                                                                                                        let (_x_26 : month) = if _x_25 then _x_22 else _x_24 in
                                                                                                                                        let (_x_27 : bool)
                                                                                                                                            = _x_25
                                                                                                                                              || _x_23 <=
                                                                                                                                                 (if _x_26 = Mar then 3
                                                                                                                                                  else
                                                                                                                                                  if _x_26 = Jun then 6
                                                                                                                                                  else
                                                                                                                                                  if (if _x_25 then if _x_21 then Mar else …
                                                                                                                                                      else if _x_18 then Mar else …)
                                                                                                                                                     = Sep
                                                                                                                                                  then 9 else 12)
                                                                                                                                        in
                                                                                                                                        let (_x_28 : month) = if _x_27 then _x_22 else _x_24 in
                                                                                                                                        let (_x_29 : int)
                                                                                                                                            = if _x_28 = Mar then 3
                                                                                                                                              else
                                                                                                                                              if _x_28 = Jun then 6
                                                                                                                                              else
                                                                                                                                              if (if _x_27 then if _x_21 then Mar else …
                                                                                                                                                  else if _x_18 then Mar else …)
                                                                                                                                                 = Sep
                                                                                                                                              then 9 else 12
                                                                                                                                        in
                                                                                                                                        let (_x_30 : int) = _x_16.leg_mult in
                                                                                                                                        let (_x_31 : int) = _x_19.leg_mult in
                                                                                                                                        let (_x_32 : int) = ( :var_0: ).leg3.leg_mult in
                                                                                                                                        let (_x_33 : int)
                                                                                                                                            = (if 0 <= _x_30 then _x_30 else (-1) * _x_30)
                                                                                                                                              + (if 0 <= _x_31 then _x_31 else (-1) * _x_31)
                                                                                                                                              + (if 0 <= _x_32 then _x_32 else (-1) * _x_32)
                                                                                                                                        in
                                                                                                                                        let (_x_34 : int) = _x_2.leg_mult in
                                                                                                                                        let (_x_35 : int) = _x_5.leg_mult in
                                                                                                                                        let (_x_36 : int) = ( :var_2: ).leg3.leg_mult in
                                                                                                                                        let (_x_37 : int)
                                                                                                                                            = (if 0 <= _x_34 then _x_34 else (-1) * _x_34)
                                                                                                                                              + (if 0 <= _x_35 then _x_35 else (-1) * _x_35)
                                                                                                                                              + (if 0 <= _x_36 then _x_36 else (-1) * _x_36)
                                                                                                                                        in
                                                                                                                                        let (_x_38 : int) = ( :var_1: ).time_created in
                                                                                                                                        let (_x_39 : leg) = ( :var_1: ).leg1 in
                                                                                                                                        let (_x_40 : outright_id) = _x_39.leg_sec_idx in
                                                                                                                                        let (_x_41 : bool) = _x_40 = OUT1 in
                                                                                                                                        let (_x_42 : leg) = ( :var_1: ).leg2 in
                                                                                                                                        let (_x_43 : outright_id) = _x_42.leg_sec_idx in
                                                                                                                                        let (_x_44 : bool) = _x_43 = OUT1 in
                                                                                                                                        let (_x_45 : month)
                                                                                                                                            = if _x_44 then Mar else if _x_43 = OUT2 then Jun else Sep
                                                                                                                                        in
                                                                                                                                        let (_x_46 : int)
                                                                                                                                            = if _x_45 = Mar then 3
                                                                                                                                              else if _x_45 = Jun then 6 else if _x_45 = Sep then 9 else 12
                                                                                                                                        in
                                                                                                                                        let (_x_47 : month)
                                                                                                                                            = if _x_41 then Mar else if _x_40 = OUT2 then Jun else Sep
                                                                                                                                        in
                                                                                                                                        let (_x_48 : bool)
                                                                                                                                            = _x_46 <=
                                                                                                                                              (if _x_47 = Mar then 3
                                                                                                                                               else if _x_47 = Jun then 6 else if _x_47 = Sep then 9 else 12)
                                                                                                                                        in
                                                                                                                                        let (_x_49 : month) = if _x_48 then _x_45 else _x_47 in
                                                                                                                                        let (_x_50 : bool)
                                                                                                                                            = _x_48
                                                                                                                                              || _x_46 <=
                                                                                                                                                 (if _x_49 = Mar then 3
                                                                                                                                                  else
                                                                                                                                                  if _x_49 = Jun then 6
                                                                                                                                                  else
                                                                                                                                                  if (if _x_48 then if _x_44 then Mar else …
                                                                                                                                                      else if _x_41 then Mar else …)
                                                                                                                                                     = Sep
                                                                                                                                                  then 9 else 12)
                                                                                                                                        in
                                                                                                                                        let (_x_51 : month) = if _x_50 then _x_45 else _x_47 in
                                                                                                                                        let (_x_52 : int)
                                                                                                                                            = if _x_51 = Mar then 3
                                                                                                                                              else
                                                                                                                                              if _x_51 = Jun then 6
                                                                                                                                              else
                                                                                                                                              if (if _x_50 then if _x_44 then Mar else …
                                                                                                                                                  else if _x_41 then Mar else …)
                                                                                                                                                 = Sep
                                                                                                                                              then 9 else 12
                                                                                                                                        in
                                                                                                                                        let (_x_53 : int) = _x_39.leg_mult in
                                                                                                                                        let (_x_54 : int) = _x_42.leg_mult in
                                                                                                                                        let (_x_55 : int) = ( :var_1: ).leg3.leg_mult in
                                                                                                                                        let (_x_56 : int)
                                                                                                                                            = (if 0 <= _x_53 then _x_53 else (-1) * _x_53)
                                                                                                                                              + (if 0 <= _x_54 then _x_54 else (-1) * _x_54)
                                                                                                                                              + (if 0 <= _x_55 then _x_55 else (-1) * _x_55)
                                                                                                                                        in
                                                                                                                                        ((_x_0 <= _x_1 || not (_x_15 <= _x_29)) || not (_x_33 <= _x_37))
                                                                                                                                        || not
                                                                                                                                           (((_x_0 <= _x_38 || not (_x_52 <= _x_29)) || not (_x_33 <= _x_56))
                                                                                                                                            && ((_x_38 <= _x_1 || not (_x_15 <= _x_52)) || not (_x_56 <= _x_37)))
                                                                                                                                        expansions:
                                                                                                                                        []
                                                                                                                                        rewrite_steps:
                                                                                                                                          forward_chaining:
                                                                                                                                          • Sat (Some let s1 : strategy = let (_x_0 : leg) = {leg_sec_idx = OUT1; leg_mult = (Z.of_nativeint (0n))} in {time_created = (Z.of_nativeint (0n)); leg1 = _x_0; leg2 = {leg_sec_idx = OUT2; leg_mult = (Z.of_nativeint (1n))}; leg3 = _x_0} let s2 : strategy = let (_x_0 : leg) = {leg_sec_idx = OUT1; leg_mult = (Z.of_nativeint (0n))} in {time_created = (Z.of_nativeint (-14681n)); leg1 = _x_0; leg2 = {leg_sec_idx = OUT3; leg_mult = (Z.of_nativeint (0n))}; leg3 = _x_0} let s3 : strategy = {time_created = (Z.of_nativeint (-1n)); leg1 = {leg_sec_idx = OUT1; leg_mult = (Z.of_nativeint (0n))}; leg2 = {leg_sec_idx = OUT3; leg_mult = (Z.of_nativeint (0n))}; leg3 = {leg_sec_idx = OUT1; leg_mult = (Z.of_nativeint (1n))}} )

                                                                                                                                          Ooops! It seems that our ranking criteria is not transitive. Let's check the results (note that the counter examples are now reflected into the run time in the CX module)

                                                                                                                                          In [13]:
                                                                                                                                          priority_strat CX.s1 CX.s2
                                                                                                                                          
                                                                                                                                          Out[13]:
                                                                                                                                          - : bool = true
                                                                                                                                          
                                                                                                                                          In [14]:
                                                                                                                                          priority_strat CX.s2 CX.s3
                                                                                                                                          
                                                                                                                                          Out[14]:
                                                                                                                                          - : bool = true
                                                                                                                                          
                                                                                                                                          In [15]:
                                                                                                                                          priority_strat CX.s1 CX.s3
                                                                                                                                          
                                                                                                                                          Out[15]:
                                                                                                                                          - : bool = false
                                                                                                                                          

                                                                                                                                          3.2 Implied strategy price calculation

                                                                                                                                          In [16]:
                                                                                                                                          (* return the sum of volume at the highest level *)
                                                                                                                                          let rec get_level_sums (orders : order list) (li : level_info option) =
                                                                                                                                            match orders with
                                                                                                                                            | [] -> li
                                                                                                                                            | x::xs ->
                                                                                                                                              begin
                                                                                                                                                match li with
                                                                                                                                                | None -> get_level_sums xs (Some {li_qty = x.o_qty; li_price = x.o_price})
                                                                                                                                                | Some l ->
                                                                                                                                                  if (l.li_price = x.o_price) then
                                                                                                                                                    get_level_sums xs (Some {l with li_qty = l.li_qty + x.o_qty})
                                                                                                                                                  else
                                                                                                                                                    li
                                                                                                                                              end
                                                                                                                                          
                                                                                                                                          (* Return best bid/ask levels *)
                                                                                                                                          let get_book_tops (b : book) =
                                                                                                                                            let bid_info = get_level_sums b.b_buys None in
                                                                                                                                            let ask_info = get_level_sums b.b_sells None in
                                                                                                                                            { bid_info; ask_info }
                                                                                                                                          ;;
                                                                                                                                          
                                                                                                                                          (* Get the maximum number of strategy units here *)
                                                                                                                                          (* Note that the units may have different signs, so we
                                                                                                                                           need to make sure that we have enough *)
                                                                                                                                          let calc_implied_strat_order (sid : strategy_id) (s : strategy) (books : books_info) (si : side) (time : int) =
                                                                                                                                            let abs x = if x < 0 then -x else x in
                                                                                                                                          
                                                                                                                                            let adjust (mult : int) =
                                                                                                                                              if si = BUY then mult else -mult in
                                                                                                                                          
                                                                                                                                            (* *)
                                                                                                                                            let calc_max_out_mult (mult : int) (book : best_bid_ask)  =
                                                                                                                                              if mult = 0 then
                                                                                                                                                None
                                                                                                                                              else
                                                                                                                                                begin
                                                                                                                                                 if (adjust mult) > 0 then
                                                                                                                                                  match books.book1.bid_info with
                                                                                                                                                     | Some x -> Some (x.li_qty / (abs mult))
                                                                                                                                                     | None -> None
                                                                                                                                                 else
                                                                                                                                                     match book.ask_info with
                                                                                                                                                     | Some x -> Some (x.li_qty / (abs mult))
                                                                                                                                                     | None -> None
                                                                                                                                                end in
                                                                                                                                          
                                                                                                                                            let mult1 = calc_max_out_mult s.leg1.leg_mult books.book1 in
                                                                                                                                            let mult2 = calc_max_out_mult s.leg2.leg_mult books.book2 in
                                                                                                                                            let mult3 = calc_max_out_mult s.leg3.leg_mult books.book3 in
                                                                                                                                          
                                                                                                                                            (* Compute the quantity *)
                                                                                                                                            let max_strat =
                                                                                                                                              begin
                                                                                                                                                 match mult1 with
                                                                                                                                                 | None -> 0
                                                                                                                                                 | Some x -> x
                                                                                                                                              end in
                                                                                                                                            let max_strat =
                                                                                                                                              begin
                                                                                                                                                 match mult2 with
                                                                                                                                                 | None -> max_strat
                                                                                                                                                 | Some x -> if x < max_strat then x else max_strat
                                                                                                                                              end in
                                                                                                                                            let max_strat =
                                                                                                                                              begin
                                                                                                                                               match mult3 with
                                                                                                                                               | None -> max_strat
                                                                                                                                               | Some x -> if x < max_strat then x else max_strat
                                                                                                                                              end in
                                                                                                                                          
                                                                                                                                            (* Now compute the price *)
                                                                                                                                            let strat_price =
                                                                                                                                              begin
                                                                                                                                                 match mult1 with
                                                                                                                                                 | None -> 0
                                                                                                                                                 | Some x ->
                                                                                                                                                   begin
                                                                                                                                                      if (adjust s.leg1.leg_mult) > 0 then
                                                                                                                                                          match books.book1.bid_info with
                                                                                                                                                          | Some x -> x.li_price * (adjust s.leg1.leg_mult)
                                                                                                                                                          | None -> 0
                                                                                                                                                      else
                                                                                                                                                          match books.book1.ask_info with
                                                                                                                                                          | Some x -> x.li_price * (adjust s.leg1.leg_mult)
                                                                                                                                                          | None -> 0
                                                                                                                                                   end
                                                                                                                                              end in
                                                                                                                                            let strat_price =
                                                                                                                                              begin
                                                                                                                                                 match mult2 with
                                                                                                                                                 | None -> strat_price
                                                                                                                                                 | Some x ->
                                                                                                                                                   begin
                                                                                                                                                      if (adjust s.leg2.leg_mult) > 0 then
                                                                                                                                                          match books.book2.bid_info with
                                                                                                                                                          | Some x -> x.li_price * (adjust s.leg2.leg_mult) + strat_price
                                                                                                                                                          | None -> strat_price
                                                                                                                                                      else
                                                                                                                                                          match books.book2.ask_info with
                                                                                                                                                          | Some x -> x.li_price * (adjust s.leg2.leg_mult) + strat_price
                                                                                                                                                          | None -> strat_price
                                                                                                                                                   end
                                                                                                                                              end in
                                                                                                                                            let strat_price =
                                                                                                                                              begin
                                                                                                                                                 match mult3 with
                                                                                                                                                 | None -> strat_price
                                                                                                                                                 | Some x ->
                                                                                                                                                   begin
                                                                                                                                                      if (adjust s.leg3.leg_mult) > 0 then
                                                                                                                                                          match books.book3.bid_info with
                                                                                                                                                          | Some x -> x.li_price * (adjust s.leg3.leg_mult) + strat_price
                                                                                                                                                          | None -> strat_price
                                                                                                                                                      else
                                                                                                                                                          match books.book3.ask_info with
                                                                                                                                                          | Some x -> x.li_price * (adjust s.leg3.leg_mult) + strat_price
                                                                                                                                                          | None -> strat_price
                                                                                                                                                   end
                                                                                                                                              end in
                                                                                                                                          
                                                                                                                                            (* Now form the new implied order here... *)
                                                                                                                                            {
                                                                                                                                             o_qty = max_strat
                                                                                                                                             ; o_price = strat_price
                                                                                                                                             ; o_id = -1
                                                                                                                                             ; o_time = time
                                                                                                                                             ; o_side = si
                                                                                                                                             ; o_client_id = -1
                                                                                                                                             ; o_inst = Strategy sid
                                                                                                                                             ; o_is_implied = true }
                                                                                                                                          ;;
                                                                                                                                          
                                                                                                                                          Out[16]:
                                                                                                                                          val get_level_sums : order list -> level_info option -> level_info option =
                                                                                                                                            <fun>
                                                                                                                                          val get_book_tops : book -> best_bid_ask = <fun>
                                                                                                                                          val calc_implied_strat_order :
                                                                                                                                            strategy_id -> strategy -> books_info -> side -> Z.t -> order = <fun>
                                                                                                                                          
                                                                                                                                          termination proof

                                                                                                                                          Termination proof

                                                                                                                                          call `let (_x_0 : order) = List.hd orders in get_level_sums (List.tl orders) (Some {li_qty = _x_0.o_qty; li_price = _x_0.o_price})` from `get_level_sums orders li`
                                                                                                                                          original:get_level_sums orders li
                                                                                                                                          sub:let (_x_0 : order) = List.hd orders in get_level_sums (List.tl orders) (Some {li_qty = _x_0.o_qty; li_price = _x_0.o_price})
                                                                                                                                          original ordinal:Ordinal.Int (_cnt orders)
                                                                                                                                          sub ordinal:Ordinal.Int (_cnt (List.tl orders))
                                                                                                                                          path:[Is_a(None, li) && orders <> []]
                                                                                                                                          proof:
                                                                                                                                          detailed proof
                                                                                                                                          ground_instances:3
                                                                                                                                          definitions:0
                                                                                                                                          inductions:0
                                                                                                                                          search_time:
                                                                                                                                          0.046s
                                                                                                                                          details:
                                                                                                                                          Expand
                                                                                                                                          smt_stats:
                                                                                                                                          num checks:8
                                                                                                                                          arith-assume-eqs:4
                                                                                                                                          arith-make-feasible:30
                                                                                                                                          arith-max-columns:37
                                                                                                                                          arith-conflicts:2
                                                                                                                                          rlimit count:31848
                                                                                                                                          mk clause:66
                                                                                                                                          datatype occurs check:36
                                                                                                                                          mk bool var:245
                                                                                                                                          arith-lower:18
                                                                                                                                          datatype splits:39
                                                                                                                                          decisions:49
                                                                                                                                          propagations:40
                                                                                                                                          interface eqs:4
                                                                                                                                          arith-max-rows:15
                                                                                                                                          conflicts:9
                                                                                                                                          datatype accessor ax:33
                                                                                                                                          datatype constructor ax:66
                                                                                                                                          num allocs:1378973883
                                                                                                                                          final checks:10
                                                                                                                                          added eqs:282
                                                                                                                                          del clause:31
                                                                                                                                          arith eq adapter:17
                                                                                                                                          arith-upper:24
                                                                                                                                          memory:7.870000
                                                                                                                                          max memory:31.410000
                                                                                                                                          Expand
                                                                                                                                          • start[0.046s]
                                                                                                                                              let (_x_0 : int) = count.list count.order orders in
                                                                                                                                              let (_x_1 : order list) = List.tl orders in
                                                                                                                                              let (_x_2 : int) = count.list count.order _x_1 in
                                                                                                                                              Is_a(None, li) && orders <> [] && _x_0 >= 0 && _x_2 >= 0
                                                                                                                                              ==> not ((List.hd orders).o_price = (List.hd _x_1).o_price && _x_1 <> [])
                                                                                                                                                  || Ordinal.( << ) (Ordinal.Int _x_2) (Ordinal.Int _x_0)
                                                                                                                                          • simplify
                                                                                                                                            into:
                                                                                                                                            let (_x_0 : order list) = List.tl orders in
                                                                                                                                            let (_x_1 : int) = count.list count.order orders in
                                                                                                                                            let (_x_2 : int) = count.list count.order _x_0 in
                                                                                                                                            (not ((List.hd orders).o_price = (List.hd _x_0).o_price && _x_0 <> [])
                                                                                                                                             || not (((Is_a(None, li) && orders <> []) && _x_1 >= 0) && _x_2 >= 0))
                                                                                                                                            || Ordinal.( << ) (Ordinal.Int _x_2) (Ordinal.Int _x_1)
                                                                                                                                            expansions:
                                                                                                                                            []
                                                                                                                                            rewrite_steps:
                                                                                                                                              forward_chaining:
                                                                                                                                              • unroll
                                                                                                                                                expr:
                                                                                                                                                (|Ordinal.<<_129/client|
                                                                                                                                                  (|Ordinal.Int_114/client|
                                                                                                                                                    (|`count.list { Resolved_term.spec_idx = 0;…
                                                                                                                                                expansions:
                                                                                                                                                • unroll
                                                                                                                                                  expr:
                                                                                                                                                  (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: order -> int) count.order); s…
                                                                                                                                                  expansions:
                                                                                                                                                  • unroll
                                                                                                                                                    expr:
                                                                                                                                                    (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: order -> int) count.order); s…
                                                                                                                                                    expansions:
                                                                                                                                                    • Unsat
                                                                                                                                                    call `let (_x_0 : level_info) = Option.get li in get_level_sums (List.tl orders) (Some {_x_0 with li_qty = _x_0.li_qty + (List.hd orders).o_qty})` from `get_level_sums orders li`
                                                                                                                                                    original:get_level_sums orders li
                                                                                                                                                    sub:let (_x_0 : level_info) = Option.get li in get_level_sums (List.tl orders) (Some {_x_0 with li_qty = _x_0.li_qty + (List.hd orders).o_qty})
                                                                                                                                                    original ordinal:Ordinal.Int (_cnt orders)
                                                                                                                                                    sub ordinal:Ordinal.Int (_cnt (List.tl orders))
                                                                                                                                                    path:[(Option.get li).li_price = (List.hd orders).o_price && not Is_a(None, li) && orders <> []]
                                                                                                                                                    proof:
                                                                                                                                                    detailed proof
                                                                                                                                                    ground_instances:3
                                                                                                                                                    definitions:0
                                                                                                                                                    inductions:0
                                                                                                                                                    search_time:
                                                                                                                                                    0.045s
                                                                                                                                                    details:
                                                                                                                                                    Expand
                                                                                                                                                    smt_stats:
                                                                                                                                                    num checks:8
                                                                                                                                                    arith-assume-eqs:1
                                                                                                                                                    arith-make-feasible:111
                                                                                                                                                    arith-max-columns:43
                                                                                                                                                    arith-conflicts:12
                                                                                                                                                    rlimit count:27732
                                                                                                                                                    arith-cheap-eqs:11
                                                                                                                                                    mk clause:122
                                                                                                                                                    datatype occurs check:28
                                                                                                                                                    mk bool var:395
                                                                                                                                                    arith-lower:103
                                                                                                                                                    arith-diseq:7
                                                                                                                                                    datatype splits:55
                                                                                                                                                    decisions:130
                                                                                                                                                    arith-propagations:2
                                                                                                                                                    propagations:150
                                                                                                                                                    interface eqs:1
                                                                                                                                                    arith-bound-propagations-cheap:2
                                                                                                                                                    arith-max-rows:15
                                                                                                                                                    conflicts:27
                                                                                                                                                    datatype accessor ax:41
                                                                                                                                                    minimized lits:16
                                                                                                                                                    arith-bound-propagations-lp:5
                                                                                                                                                    datatype constructor ax:75
                                                                                                                                                    num allocs:1309799514
                                                                                                                                                    final checks:7
                                                                                                                                                    added eqs:466
                                                                                                                                                    del clause:82
                                                                                                                                                    arith eq adapter:79
                                                                                                                                                    arith-upper:91
                                                                                                                                                    memory:7.840000
                                                                                                                                                    max memory:31.410000
                                                                                                                                                    Expand
                                                                                                                                                    • start[0.045s]
                                                                                                                                                        let (_x_0 : int) = (Option.get li).li_price in
                                                                                                                                                        let (_x_1 : int) = count.list count.order orders in
                                                                                                                                                        let (_x_2 : order list) = List.tl orders in
                                                                                                                                                        let (_x_3 : int) = count.list count.order _x_2 in
                                                                                                                                                        _x_0 = (List.hd orders).o_price
                                                                                                                                                        && not Is_a(None, li) && orders <> [] && _x_1 >= 0 && _x_3 >= 0
                                                                                                                                                        ==> not (_x_0 = (List.hd _x_2).o_price && _x_2 <> [])
                                                                                                                                                            || Ordinal.( << ) (Ordinal.Int _x_3) (Ordinal.Int _x_1)
                                                                                                                                                    • simplify
                                                                                                                                                      into:
                                                                                                                                                      let (_x_0 : int) = (Option.get li).li_price in
                                                                                                                                                      let (_x_1 : order list) = List.tl orders in
                                                                                                                                                      let (_x_2 : int) = count.list count.order _x_1 in
                                                                                                                                                      let (_x_3 : int) = count.list count.order orders in
                                                                                                                                                      (not (_x_0 = (List.hd _x_1).o_price && _x_1 <> [])
                                                                                                                                                       || Ordinal.( << ) (Ordinal.Int _x_2) (Ordinal.Int _x_3))
                                                                                                                                                      || not
                                                                                                                                                         ((((_x_0 = (List.hd orders).o_price && not Is_a(None, li)) && orders <> [])
                                                                                                                                                           && _x_3 >= 0)
                                                                                                                                                          && _x_2 >= 0)
                                                                                                                                                      expansions:
                                                                                                                                                      []
                                                                                                                                                      rewrite_steps:
                                                                                                                                                        forward_chaining:
                                                                                                                                                        • unroll
                                                                                                                                                          expr:
                                                                                                                                                          (|Ordinal.<<_129/client|
                                                                                                                                                            (|Ordinal.Int_114/client|
                                                                                                                                                              (|`count.list { Resolved_term.spec_idx = 0;…
                                                                                                                                                          expansions:
                                                                                                                                                          • unroll
                                                                                                                                                            expr:
                                                                                                                                                            (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: order -> int) count.order); s…
                                                                                                                                                            expansions:
                                                                                                                                                            • unroll
                                                                                                                                                              expr:
                                                                                                                                                              (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: order -> int) count.order); s…
                                                                                                                                                              expansions:
                                                                                                                                                              • Unsat

                                                                                                                                                              Let's now try to experiment with this.

                                                                                                                                                              In [17]:
                                                                                                                                                              let strat1 = {
                                                                                                                                                                time_created = 1;
                                                                                                                                                                leg1    = { leg_sec_idx = OUT1; leg_mult = 1 }
                                                                                                                                                                ; leg2  = { leg_sec_idx = OUT2; leg_mult = 0 }
                                                                                                                                                                ; leg3  = { leg_sec_idx = OUT3; leg_mult = 0 }
                                                                                                                                                              };;
                                                                                                                                                              
                                                                                                                                                              let books = {
                                                                                                                                                                  book1 = { bid_info = None ; ask_info = Some { li_qty = 100 ; li_price = 450 }}
                                                                                                                                                                ; book2 = { bid_info = Some { li_qty = 125 ; li_price = 100 }; ask_info = Some { li_qty = 100 ; li_price = 350 }}
                                                                                                                                                                ; book3 = { bid_info = None ; ask_info = Some { li_qty = 100 ; li_price = 425 }}
                                                                                                                                                              };;
                                                                                                                                                              
                                                                                                                                                              (* This should just replicate the OUT1 security on the SELL side *)
                                                                                                                                                              calc_implied_strat_order STRAT1 strat1 books SELL 1
                                                                                                                                                              
                                                                                                                                                              Out[17]:
                                                                                                                                                              val strat1 : strategy =
                                                                                                                                                                {time_created = 1; leg1 = {leg_sec_idx = OUT1; leg_mult = 1};
                                                                                                                                                                 leg2 = {leg_sec_idx = OUT2; leg_mult = 0};
                                                                                                                                                                 leg3 = {leg_sec_idx = OUT3; leg_mult = 0}}
                                                                                                                                                              val books : books_info =
                                                                                                                                                                {book1 = {bid_info = None; ask_info = Some {li_qty = 100; li_price = 450}};
                                                                                                                                                                 book2 =
                                                                                                                                                                  {bid_info = Some {li_qty = 125; li_price = 100};
                                                                                                                                                                   ask_info = Some {li_qty = 100; li_price = 350}};
                                                                                                                                                                 book3 = {bid_info = None; ask_info = Some {li_qty = 100; li_price = 425}}}
                                                                                                                                                              - : order = <document>
                                                                                                                                                              
                                                                                                                                                              -450 (100)
                                                                                                                                                              Implied
                                                                                                                                                              In [18]:
                                                                                                                                                              (* Now let's try the same on the BUY side - there should not be any available orders as the bid is empty *)
                                                                                                                                                              calc_implied_strat_order STRAT1 strat1 books BUY 1
                                                                                                                                                              
                                                                                                                                                              Out[18]:
                                                                                                                                                              - : order = <document>
                                                                                                                                                              
                                                                                                                                                              0 (0)
                                                                                                                                                              Implied
                                                                                                                                                              In [19]:
                                                                                                                                                              (* let's try to mix up the legs now *)
                                                                                                                                                              
                                                                                                                                                              let strat2 = {
                                                                                                                                                               strat1 with
                                                                                                                                                               leg2 = {leg_sec_idx = OUT2; leg_mult = -1}
                                                                                                                                                              };;
                                                                                                                                                              
                                                                                                                                                              (* This will not result in any orders because there's no BUY *)
                                                                                                                                                              calc_implied_strat_order STRAT1 strat2 books BUY 1
                                                                                                                                                              
                                                                                                                                                              Out[19]:
                                                                                                                                                              val strat2 : strategy =
                                                                                                                                                                {time_created = 1; leg1 = {leg_sec_idx = OUT1; leg_mult = 1};
                                                                                                                                                                 leg2 = {leg_sec_idx = OUT2; leg_mult = -1};
                                                                                                                                                                 leg3 = {leg_sec_idx = OUT3; leg_mult = 0}}
                                                                                                                                                              - : order = <document>
                                                                                                                                                              
                                                                                                                                                              -350 (0)
                                                                                                                                                              Implied
                                                                                                                                                              In [20]:
                                                                                                                                                              calc_implied_strat_order STRAT2 strat2 books SELL 1
                                                                                                                                                              
                                                                                                                                                              Out[20]:
                                                                                                                                                              - : order = <document>
                                                                                                                                                              
                                                                                                                                                              -450 (100)
                                                                                                                                                              Implied
                                                                                                                                                              In [21]:
                                                                                                                                                              let strat = {
                                                                                                                                                                time_created = 1;
                                                                                                                                                                leg1    = { leg_sec_idx = OUT1; leg_mult = 1 }
                                                                                                                                                                ; leg2  = { leg_sec_idx = OUT2; leg_mult = -2 }
                                                                                                                                                                ; leg3  = { leg_sec_idx = OUT3; leg_mult = 0 }
                                                                                                                                                              };;
                                                                                                                                                              
                                                                                                                                                              let books = {
                                                                                                                                                                  book1 = { bid_info = Some { li_qty = 500; li_price = 50 } ; ask_info = Some { li_qty = 750 ; li_price = 50 }}
                                                                                                                                                                ; book2 = { bid_info = Some { li_qty = 200 ; li_price = 60 }; ask_info = Some { li_qty = 500 ; li_price = 70 }}
                                                                                                                                                                ; book3 = { bid_info = None ; ask_info = None }
                                                                                                                                                              };;
                                                                                                                                                              
                                                                                                                                                              calc_implied_strat_order STRAT1 strat books BUY 1
                                                                                                                                                              
                                                                                                                                                              Out[21]:
                                                                                                                                                              val strat : strategy =
                                                                                                                                                                {time_created = 1; leg1 = {leg_sec_idx = OUT1; leg_mult = 1};
                                                                                                                                                                 leg2 = {leg_sec_idx = OUT2; leg_mult = -2};
                                                                                                                                                                 leg3 = {leg_sec_idx = OUT3; leg_mult = 0}}
                                                                                                                                                              val books : books_info =
                                                                                                                                                                {book1 =
                                                                                                                                                                  {bid_info = Some {li_qty = 500; li_price = 50};
                                                                                                                                                                   ask_info = Some {li_qty = 750; li_price = 50}};
                                                                                                                                                                 book2 =
                                                                                                                                                                  {bid_info = Some {li_qty = 200; li_price = 60};
                                                                                                                                                                   ask_info = Some {li_qty = 500; li_price = 70}};
                                                                                                                                                                 book3 = {bid_info = None; ask_info = None}}
                                                                                                                                                              - : order = <document>
                                                                                                                                                              
                                                                                                                                                              -90 (250)
                                                                                                                                                              Implied

                                                                                                                                                              3.3 Implied uncrossing operations

                                                                                                                                                              In [22]:
                                                                                                                                                              (* removes implied orders from a book *)
                                                                                                                                                              let remove_imp_orders (b : book) =
                                                                                                                                                                let rec remove_imp_orders_side (orders : order list) =
                                                                                                                                                                  match orders with
                                                                                                                                                                  | [] -> []
                                                                                                                                                                  | x::xs ->
                                                                                                                                                                      if x.o_is_implied then
                                                                                                                                                                        (remove_imp_orders_side xs)
                                                                                                                                                                      else
                                                                                                                                                                        x::(remove_imp_orders_side xs) in
                                                                                                                                                              
                                                                                                                                                                { b_buys = (remove_imp_orders_side b.b_buys)
                                                                                                                                                                ; b_sells = (remove_imp_orders_side b.b_sells)
                                                                                                                                                                }
                                                                                                                                                              
                                                                                                                                                              (* Allocate implied fills to the book and return fills *)
                                                                                                                                                              let allocate_implied_fills (b : book) (qty : int) (price : int) (time : int) =
                                                                                                                                                                if qty = 0 then {
                                                                                                                                                                  uncrossed_book = b
                                                                                                                                                                  ; uncrossed_fills = []
                                                                                                                                                                  ; uncrossed_qty = 0
                                                                                                                                                                } else
                                                                                                                                                                begin
                                                                                                                                                                  (* Insert new order into the book and uncross it *)
                                                                                                                                                                  let new_order = {
                                                                                                                                                                    o_qty = if qty < 0 then (-qty) else qty
                                                                                                                                                                    ; o_price = price
                                                                                                                                                                    ; o_id = -1
                                                                                                                                                                    ; o_time = time
                                                                                                                                                                    ; o_side = if qty < 0 then SELL else BUY
                                                                                                                                                                    ; o_client_id = -1
                                                                                                                                                                    ; o_inst = Outright OUT1
                                                                                                                                                                    ; o_is_implied = true
                                                                                                                                                                  } in
                                                                                                                                                              
                                                                                                                                                                  (* create new order that we will trade *)
                                                                                                                                                                  let b' = insert_order new_order b in
                                                                                                                                                              
                                                                                                                                                                  (* finally we will uncross the book and return results *)
                                                                                                                                                                  (uncross_book b' [] 0)
                                                                                                                                                                end
                                                                                                                                                              
                                                                                                                                                              (* Calculate the price at which implied orders should trade in the outright books *)
                                                                                                                                                              let calc_implied_trade_price (mult : int) (bidask : best_bid_ask) =
                                                                                                                                                                if mult > 0 then
                                                                                                                                                                 begin
                                                                                                                                                                  match bidask.ask_info with
                                                                                                                                                                    | None -> 0
                                                                                                                                                                    | Some x -> x.li_price
                                                                                                                                                                  end
                                                                                                                                                                else
                                                                                                                                                                  begin
                                                                                                                                                                      match bidask.bid_info with
                                                                                                                                                                        | None -> 0
                                                                                                                                                                        | Some x -> x.li_price
                                                                                                                                                                  end
                                                                                                                                                              ;;
                                                                                                                                                              
                                                                                                                                                              Out[22]:
                                                                                                                                                              val remove_imp_orders : book -> book = <fun>
                                                                                                                                                              val allocate_implied_fills : book -> Z.t -> Z.t -> Z.t -> uncross_res = <fun>
                                                                                                                                                              val calc_implied_trade_price : Z.t -> best_bid_ask -> Z.t = <fun>
                                                                                                                                                              
                                                                                                                                                              termination proof

                                                                                                                                                              Termination proof

                                                                                                                                                              call `rec_fun.remove_imp_orders.remove_imp_orders_side.0 (List.tl orders)` from `rec_fun.remove_imp_orders.remove_imp_orders_side.0 orders`
                                                                                                                                                              original:rec_fun.remove_imp_orders.remove_imp_orders_side.0 orders
                                                                                                                                                              sub:rec_fun.remove_imp_orders.remove_imp_orders_side.0 (List.tl orders)
                                                                                                                                                              original ordinal:Ordinal.Int (_cnt orders)
                                                                                                                                                              sub ordinal:Ordinal.Int (_cnt (List.tl orders))
                                                                                                                                                              path:[(List.hd orders).o_is_implied && orders <> []]
                                                                                                                                                              proof:
                                                                                                                                                              detailed proof
                                                                                                                                                              ground_instances:3
                                                                                                                                                              definitions:0
                                                                                                                                                              inductions:0
                                                                                                                                                              search_time:
                                                                                                                                                              0.034s
                                                                                                                                                              details:
                                                                                                                                                              Expand
                                                                                                                                                              smt_stats:
                                                                                                                                                              num checks:8
                                                                                                                                                              arith-assume-eqs:3
                                                                                                                                                              arith-make-feasible:99
                                                                                                                                                              arith-max-columns:53
                                                                                                                                                              arith-conflicts:2
                                                                                                                                                              rlimit count:43536
                                                                                                                                                              mk clause:110
                                                                                                                                                              datatype occurs check:26
                                                                                                                                                              mk bool var:330
                                                                                                                                                              arith-lower:58
                                                                                                                                                              datatype splits:35
                                                                                                                                                              decisions:133
                                                                                                                                                              arith-propagations:1
                                                                                                                                                              propagations:136
                                                                                                                                                              interface eqs:3
                                                                                                                                                              arith-bound-propagations-cheap:1
                                                                                                                                                              arith-max-rows:23
                                                                                                                                                              conflicts:14
                                                                                                                                                              datatype accessor ax:35
                                                                                                                                                              datatype constructor ax:77
                                                                                                                                                              num allocs:1488929076
                                                                                                                                                              final checks:9
                                                                                                                                                              added eqs:386
                                                                                                                                                              del clause:76
                                                                                                                                                              arith eq adapter:53
                                                                                                                                                              arith-upper:92
                                                                                                                                                              memory:10.680000
                                                                                                                                                              max memory:31.410000
                                                                                                                                                              Expand
                                                                                                                                                              • start[0.034s]
                                                                                                                                                                  let (_x_0 : int) = count.list count.order orders in
                                                                                                                                                                  let (_x_1 : order list) = List.tl orders in
                                                                                                                                                                  let (_x_2 : int) = count.list count.order _x_1 in
                                                                                                                                                                  let (_x_3 : bool) = (List.hd _x_1).o_is_implied in
                                                                                                                                                                  let (_x_4 : bool) = _x_1 <> [] in
                                                                                                                                                                  (List.hd orders).o_is_implied && orders <> [] && _x_0 >= 0 && _x_2 >= 0
                                                                                                                                                                  ==> not (_x_3 && _x_4) && not (not _x_3 && _x_4)
                                                                                                                                                                      || Ordinal.( << ) (Ordinal.Int _x_2) (Ordinal.Int _x_0)
                                                                                                                                                              • simplify
                                                                                                                                                                into:
                                                                                                                                                                let (_x_0 : int) = count.list count.order orders in
                                                                                                                                                                let (_x_1 : order list) = List.tl orders in
                                                                                                                                                                let (_x_2 : int) = count.list count.order _x_1 in
                                                                                                                                                                let (_x_3 : bool) = (List.hd _x_1).o_is_implied in
                                                                                                                                                                let (_x_4 : bool) = _x_1 <> [] in
                                                                                                                                                                (not
                                                                                                                                                                 ((((List.hd orders).o_is_implied && orders <> []) && _x_0 >= 0) && _x_2 >= 0)
                                                                                                                                                                 || Ordinal.( << ) (Ordinal.Int _x_2) (Ordinal.Int _x_0))
                                                                                                                                                                || not (_x_3 && _x_4) && not (not _x_3 && _x_4)
                                                                                                                                                                expansions:
                                                                                                                                                                []
                                                                                                                                                                rewrite_steps:
                                                                                                                                                                  forward_chaining:
                                                                                                                                                                  • unroll
                                                                                                                                                                    expr:
                                                                                                                                                                    (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: order -> int) count.order); s…
                                                                                                                                                                    expansions:
                                                                                                                                                                    • unroll
                                                                                                                                                                      expr:
                                                                                                                                                                      (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: order -> int) count.order); s…
                                                                                                                                                                      expansions:
                                                                                                                                                                      • unroll
                                                                                                                                                                        expr:
                                                                                                                                                                        (|Ordinal.<<_129/client|
                                                                                                                                                                          (|Ordinal.Int_114/client|
                                                                                                                                                                            (|`count.list { Resolved_term.spec_idx = 0;…
                                                                                                                                                                        expansions:
                                                                                                                                                                        • Unsat
                                                                                                                                                                        call `rec_fun.remove_imp_orders.remove_imp_orders_side.0 (List.tl orders)` from `rec_fun.remove_imp_orders.remove_imp_orders_side.0 orders`
                                                                                                                                                                        original:rec_fun.remove_imp_orders.remove_imp_orders_side.0 orders
                                                                                                                                                                        sub:rec_fun.remove_imp_orders.remove_imp_orders_side.0 (List.tl orders)
                                                                                                                                                                        original ordinal:Ordinal.Int (_cnt orders)
                                                                                                                                                                        sub ordinal:Ordinal.Int (_cnt (List.tl orders))
                                                                                                                                                                        path:[not (List.hd orders).o_is_implied && orders <> []]
                                                                                                                                                                        proof:
                                                                                                                                                                        detailed proof
                                                                                                                                                                        ground_instances:3
                                                                                                                                                                        definitions:0
                                                                                                                                                                        inductions:0
                                                                                                                                                                        search_time:
                                                                                                                                                                        0.034s
                                                                                                                                                                        details:
                                                                                                                                                                        Expand
                                                                                                                                                                        smt_stats:
                                                                                                                                                                        num checks:8
                                                                                                                                                                        arith-assume-eqs:3
                                                                                                                                                                        arith-make-feasible:83
                                                                                                                                                                        arith-max-columns:53
                                                                                                                                                                        arith-conflicts:2
                                                                                                                                                                        rlimit count:37573
                                                                                                                                                                        mk clause:102
                                                                                                                                                                        datatype occurs check:26
                                                                                                                                                                        mk bool var:310
                                                                                                                                                                        arith-lower:49
                                                                                                                                                                        datatype splits:35
                                                                                                                                                                        decisions:120
                                                                                                                                                                        arith-propagations:1
                                                                                                                                                                        propagations:127
                                                                                                                                                                        interface eqs:3
                                                                                                                                                                        arith-bound-propagations-cheap:1
                                                                                                                                                                        arith-max-rows:23
                                                                                                                                                                        conflicts:14
                                                                                                                                                                        datatype accessor ax:34
                                                                                                                                                                        datatype constructor ax:73
                                                                                                                                                                        num allocs:1451894867
                                                                                                                                                                        final checks:9
                                                                                                                                                                        added eqs:360
                                                                                                                                                                        del clause:68
                                                                                                                                                                        arith eq adapter:45
                                                                                                                                                                        arith-upper:77
                                                                                                                                                                        memory:7.900000
                                                                                                                                                                        max memory:31.410000
                                                                                                                                                                        Expand
                                                                                                                                                                        • start[0.034s]
                                                                                                                                                                            let (_x_0 : int) = count.list count.order orders in
                                                                                                                                                                            let (_x_1 : order list) = List.tl orders in
                                                                                                                                                                            let (_x_2 : int) = count.list count.order _x_1 in
                                                                                                                                                                            let (_x_3 : bool) = (List.hd _x_1).o_is_implied in
                                                                                                                                                                            let (_x_4 : bool) = _x_1 <> [] in
                                                                                                                                                                            not (List.hd orders).o_is_implied && orders <> [] && _x_0 >= 0 && _x_2 >= 0
                                                                                                                                                                            ==> not (_x_3 && _x_4) && not (not _x_3 && _x_4)
                                                                                                                                                                                || Ordinal.( << ) (Ordinal.Int _x_2) (Ordinal.Int _x_0)
                                                                                                                                                                        • simplify
                                                                                                                                                                          into:
                                                                                                                                                                          let (_x_0 : int) = count.list count.order orders in
                                                                                                                                                                          let (_x_1 : order list) = List.tl orders in
                                                                                                                                                                          let (_x_2 : int) = count.list count.order _x_1 in
                                                                                                                                                                          let (_x_3 : bool) = (List.hd _x_1).o_is_implied in
                                                                                                                                                                          let (_x_4 : bool) = _x_1 <> [] in
                                                                                                                                                                          (not
                                                                                                                                                                           (((not (List.hd orders).o_is_implied && orders <> []) && _x_0 >= 0)
                                                                                                                                                                            && _x_2 >= 0)
                                                                                                                                                                           || Ordinal.( << ) (Ordinal.Int _x_2) (Ordinal.Int _x_0))
                                                                                                                                                                          || not (_x_3 && _x_4) && not (not _x_3 && _x_4)
                                                                                                                                                                          expansions:
                                                                                                                                                                          []
                                                                                                                                                                          rewrite_steps:
                                                                                                                                                                            forward_chaining:
                                                                                                                                                                            • unroll
                                                                                                                                                                              expr:
                                                                                                                                                                              (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: order -> int) count.order); s…
                                                                                                                                                                              expansions:
                                                                                                                                                                              • unroll
                                                                                                                                                                                expr:
                                                                                                                                                                                (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: order -> int) count.order); s…
                                                                                                                                                                                expansions:
                                                                                                                                                                                • unroll
                                                                                                                                                                                  expr:
                                                                                                                                                                                  (|Ordinal.<<_129/client|
                                                                                                                                                                                    (|Ordinal.Int_114/client|
                                                                                                                                                                                      (|`count.list { Resolved_term.spec_idx = 0;…
                                                                                                                                                                                  expansions:
                                                                                                                                                                                  • Unsat

                                                                                                                                                                                  3.4 Implied uncrossing (for single side)

                                                                                                                                                                                  In [23]:
                                                                                                                                                                                  (* The actual cycle *)
                                                                                                                                                                                  let implied_uncross_side (sd : side) (s_id : strategy_id) (s : strategy) (m : market) =
                                                                                                                                                                                  
                                                                                                                                                                                    (* 0. get the top of the book s*)
                                                                                                                                                                                    let book1 = get_book_tops m.out_book1 in
                                                                                                                                                                                    let book2 = get_book_tops m.out_book2 in
                                                                                                                                                                                    let book3 = get_book_tops m.out_book3 in
                                                                                                                                                                                  
                                                                                                                                                                                    let books_tops = { book1; book2; book3 } in
                                                                                                                                                                                  
                                                                                                                                                                                    (* 1. calculate the implied orders that are available right now... *)
                                                                                                                                                                                    let imp_order = calc_implied_strat_order s_id s books_tops sd m.curr_time in
                                                                                                                                                                                  
                                                                                                                                                                                    (* Need to increase the order ID first *)
                                                                                                                                                                                    let new_ord_id = m.last_ord_id + 1 in
                                                                                                                                                                                  
                                                                                                                                                                                    (* 2. insert them into the order book *)
                                                                                                                                                                                    let strat_book =
                                                                                                                                                                                      begin
                                                                                                                                                                                        match s_id with
                                                                                                                                                                                        | STRAT1 -> insert_order { imp_order with o_id = new_ord_id } m.s_book1
                                                                                                                                                                                        | STRAT2 -> insert_order { imp_order with o_id = new_ord_id } m.s_book2
                                                                                                                                                                                      end in
                                                                                                                                                                                  
                                                                                                                                                                                    (* 3. perform the uncross - get the fills, etc... *)
                                                                                                                                                                                    let unc_result = uncross_book strat_book [] 0 in
                                                                                                                                                                                  
                                                                                                                                                                                    let fq = unc_result.uncrossed_qty in
                                                                                                                                                                                  
                                                                                                                                                                                    if fq = 0 then
                                                                                                                                                                                      (* Since we didn't trade anything, let's just return the original market state *)
                                                                                                                                                                                      m
                                                                                                                                                                                    else
                                                                                                                                                                                  
                                                                                                                                                                                    let adjust (mult : int) =
                                                                                                                                                                                      let mult = -mult in
                                                                                                                                                                                      if sd = BUY then mult else -mult in
                                                                                                                                                                                  
                                                                                                                                                                                    let adj_mul1 = adjust s.leg1.leg_mult in
                                                                                                                                                                                    let adj_mul2 = adjust s.leg2.leg_mult in
                                                                                                                                                                                    let adj_mul3 = adjust s.leg3.leg_mult in
                                                                                                                                                                                  
                                                                                                                                                                                    (* calculate the prices at which outright orders will trade *)
                                                                                                                                                                                    let price1 = calc_implied_trade_price adj_mul1 book1 in
                                                                                                                                                                                    let price2 = calc_implied_trade_price adj_mul2 book2 in
                                                                                                                                                                                    let price3 = calc_implied_trade_price adj_mul3 book3 in
                                                                                                                                                                                  
                                                                                                                                                                                    (* 4. allocate fills to the outright orders *)
                                                                                                                                                                                    let out_book1_res = allocate_implied_fills m.out_book1 (fq * adj_mul1) price1 m.curr_time in
                                                                                                                                                                                    let out_book2_res = allocate_implied_fills m.out_book2 (fq * adj_mul2) price2 m.curr_time in
                                                                                                                                                                                    let out_book3_res = allocate_implied_fills m.out_book3 (fq * adj_mul3) price3 m.curr_time in
                                                                                                                                                                                  
                                                                                                                                                                                    (* 5. remove the implied orders - notice that the uncrossed result contains a new book
                                                                                                                                                                                      with partial fills *)
                                                                                                                                                                                    let m = match s_id with
                                                                                                                                                                                    | STRAT1 -> { m with s_book1 = remove_imp_orders unc_result.uncrossed_book }
                                                                                                                                                                                    | STRAT2 -> { m with s_book2 = remove_imp_orders unc_result.uncrossed_book } in
                                                                                                                                                                                  
                                                                                                                                                                                    (* 6. let's now gather all of the fills and turn them into outbound messages *)
                                                                                                                                                                                    let new_fill_msgs = create_fill_msgs (unc_result.uncrossed_fills @ out_book1_res.uncrossed_fills
                                                                                                                                                                                      @ out_book2_res.uncrossed_fills @ out_book3_res.uncrossed_fills) in
                                                                                                                                                                                  
                                                                                                                                                                                    { m with
                                                                                                                                                                                      outbound_msgs = new_fill_msgs @ m.outbound_msgs
                                                                                                                                                                                      ; out_book1 = out_book1_res.uncrossed_book
                                                                                                                                                                                      ; out_book2 = out_book2_res.uncrossed_book
                                                                                                                                                                                      ; out_book3 = out_book3_res.uncrossed_book
                                                                                                                                                                                      ; last_ord_id = new_ord_id }
                                                                                                                                                                                  ;;
                                                                                                                                                                                  
                                                                                                                                                                                  Out[23]:
                                                                                                                                                                                  val implied_uncross_side :
                                                                                                                                                                                    side -> strategy_id -> strategy -> market -> market = <fun>
                                                                                                                                                                                  

                                                                                                                                                                                  Let's now experiment with some concrete examples.

                                                                                                                                                                                  In [24]:
                                                                                                                                                                                  #program;;
                                                                                                                                                                                  (* #remove_doc doc_of_market;; *)
                                                                                                                                                                                  #logic;;
                                                                                                                                                                                  
                                                                                                                                                                                  let strat = {
                                                                                                                                                                                    time_created = 1;
                                                                                                                                                                                    leg1    = { leg_sec_idx = OUT1; leg_mult = 1 }
                                                                                                                                                                                    ; leg2  = { leg_sec_idx = OUT2; leg_mult = -2 }
                                                                                                                                                                                    ; leg3  = { leg_sec_idx = OUT3; leg_mult = 0 }
                                                                                                                                                                                  };;
                                                                                                                                                                                  
                                                                                                                                                                                  let books = {
                                                                                                                                                                                      book1 = { bid_info = Some { li_qty = 500; li_price = 50 } ; ask_info = Some { li_qty = 750 ; li_price = 50 }}
                                                                                                                                                                                    ; book2 = { bid_info = Some { li_qty = 200 ; li_price = 60 }; ask_info = Some { li_qty = 500 ; li_price = 70 }}
                                                                                                                                                                                    ; book3 = { bid_info = None ; ask_info = None }
                                                                                                                                                                                  };;
                                                                                                                                                                                  
                                                                                                                                                                                  let m = {
                                                                                                                                                                                    curr_time = 1
                                                                                                                                                                                  
                                                                                                                                                                                    ; last_ord_id = 0
                                                                                                                                                                                  
                                                                                                                                                                                    (* first strategy is 2*x1 - x2 + x3 *)
                                                                                                                                                                                    ; strat1 = (make_strat 1 2 (-1) 1)
                                                                                                                                                                                    (* second strategy is just the 3rd outright security *)
                                                                                                                                                                                    ; strat2 = (make_strat 2 0 1 0)
                                                                                                                                                                                  
                                                                                                                                                                                    (* outright books *)
                                                                                                                                                                                    ; out_book1 = {
                                                                                                                                                                                      b_buys = [ (make BUY 500 50 1 (Outright OUT1) 1 false 1) ]
                                                                                                                                                                                      ; b_sells = [ (make SELL 750 55 2 (Outright OUT1) 1 false 1) ]
                                                                                                                                                                                    }
                                                                                                                                                                                  
                                                                                                                                                                                    ; out_book2 = {
                                                                                                                                                                                      b_buys = [ (make BUY 200 60 3 (Outright OUT1) 1 false 1) ]
                                                                                                                                                                                      ; b_sells = [ (make SELL 500 70 4 (Outright OUT1) 1 false 1) ]
                                                                                                                                                                                    }
                                                                                                                                                                                  
                                                                                                                                                                                    ; out_book3 = {
                                                                                                                                                                                      b_buys = [ ]
                                                                                                                                                                                      ; b_sells = []
                                                                                                                                                                                    }
                                                                                                                                                                                  
                                                                                                                                                                                    (* Strategy books *)
                                                                                                                                                                                    ; s_book1 = {
                                                                                                                                                                                      b_buys = [
                                                                                                                                                                                      ]
                                                                                                                                                                                      ; b_sells = [
                                                                                                                                                                                        (make SELL 100 (-100) 5 (Strategy STRAT1) 1 false 1)
                                                                                                                                                                                      ]
                                                                                                                                                                                    }
                                                                                                                                                                                    ; s_book2 = empty_book
                                                                                                                                                                                  
                                                                                                                                                                                    (* Inbound and outbound message queues *)
                                                                                                                                                                                    ; inbound_msgs = []
                                                                                                                                                                                    ; outbound_msgs = []
                                                                                                                                                                                  } in
                                                                                                                                                                                  
                                                                                                                                                                                  let m' = implied_uncross_side BUY STRAT1 strat m in
                                                                                                                                                                                  
                                                                                                                                                                                  (*calc_implied_strat_order STRAT1 m.strat1 books BUY 1 *)
                                                                                                                                                                                  m'.outbound_msgs
                                                                                                                                                                                  
                                                                                                                                                                                  Out[24]:
                                                                                                                                                                                  val strat : strategy =
                                                                                                                                                                                    {time_created = 1; leg1 = {leg_sec_idx = OUT1; leg_mult = 1};
                                                                                                                                                                                     leg2 = {leg_sec_idx = OUT2; leg_mult = -2};
                                                                                                                                                                                     leg3 = {leg_sec_idx = OUT3; leg_mult = 0}}
                                                                                                                                                                                  val books : books_info =
                                                                                                                                                                                    {book1 =
                                                                                                                                                                                      {bid_info = Some {li_qty = 500; li_price = 50};
                                                                                                                                                                                       ask_info = Some {li_qty = 750; li_price = 50}};
                                                                                                                                                                                     book2 =
                                                                                                                                                                                      {bid_info = Some {li_qty = 200; li_price = 60};
                                                                                                                                                                                       ask_info = Some {li_qty = 500; li_price = 70}};
                                                                                                                                                                                     book3 = {bid_info = None; ask_info = None}}
                                                                                                                                                                                  - : outbound_msg list =
                                                                                                                                                                                  [Fill
                                                                                                                                                                                    {fill_client_id = 1; fill_qty = 100; fill_price = -95; fill_order_id = 5;
                                                                                                                                                                                     fill_order_done = true};
                                                                                                                                                                                   Fill
                                                                                                                                                                                    {fill_client_id = 1; fill_qty = 100; fill_price = 50; fill_order_id = 1;
                                                                                                                                                                                     fill_order_done = true};
                                                                                                                                                                                   Fill
                                                                                                                                                                                    {fill_client_id = 1; fill_qty = 200; fill_price = 70; fill_order_id = 4;
                                                                                                                                                                                     fill_order_done = true}]
                                                                                                                                                                                  

                                                                                                                                                                                  3.5 Implied uncrossing decomposition

                                                                                                                                                                                  In [25]:
                                                                                                                                                                                  (* Let's try to decompose the logic of 'implied_uncross_side' - we will put
                                                                                                                                                                                     several functions in the basis to focus on the critical aspects of the logic *)
                                                                                                                                                                                  #timeout 1000;;
                                                                                                                                                                                  
                                                                                                                                                                                  let d = Modular_decomp.top "implied_uncross_side"
                                                                                                                                                                                          ~basis:["get_book_tops"; "allocate_implied_fills"; "insert_order";
                                                                                                                                                                                          "create_fill_msgs"; "calc_implied_strat_order"] ~prune:true [@@program];;
                                                                                                                                                                                  
                                                                                                                                                                                  Out[25]:
                                                                                                                                                                                  val d : Top_result.modular_decomposition =
                                                                                                                                                                                    (decomp (implied_uncross_side sd, s_id, s, m
                                                                                                                                                                                     :regions (<reg 0>,
                                                                                                                                                                                               <reg 1>,
                                                                                                                                                                                               <reg 2>,
                                                                                                                                                                                               <reg 3>,
                                                                                                                                                                                               <reg 4>,
                                                                                                                                                                                               <reg 5>,
                                                                                                                                                                                               <reg 6>,
                                                                                                                                                                                               <reg 7>,
                                                                                                                                                                                               <reg 8>,
                                                                                                                                                                                               <reg 9>,
                                                                                                                                                                                               <reg 10>,
                                                                                                                                                                                               <reg 11>,
                                                                                                                                                                                               <reg 12>,
                                                                                                                                                                                               <reg 13>,
                                                                                                                                                                                               <reg 14>,
                                                                                                                                                                                               <reg 15>,
                                                                                                                                                                                               <reg 16>,
                                                                                                                                                                                               <reg 17>,
                                                                                                                                                                                               <reg 18>,
                                                                                                                                                                                               <reg 19>,
                                                                                                                                                                                               <reg 20>,
                                                                                                                                                                                               <reg 21>,
                                                                                                                                                                                               <reg 22>,
                                                                                                                                                                                               <reg 23>,
                                                                                                                                                                                               <reg 24>,
                                                                                                                                                                                               <reg 25>,
                                                                                                                                                                                               <reg 26>,
                                                                                                                                                                                               <reg 27>,
                                                                                                                                                                                               <reg 28>,
                                                                                                                                                                                               <reg 29>,
                                                                                                                                                                                               <reg 30>,
                                                                                                                                                                                               <reg 31>,
                                                                                                                                                                                               <reg 32>,
                                                                                                                                                                                               <reg 33>,
                                                                                                                                                                                               <reg 34>,
                                                                                                                                                                                               <reg 35>,
                                                                                                                                                                                               <reg 36>,
                                                                                                                                                                                               <reg 37>,
                                                                                                                                                                                               <reg 38>,
                                                                                                                                                                                               <reg 39>,
                                                                                                                                                                                               <reg 40>,
                                                                                                                                                                                               <reg 41>,
                                                                                                                                                                                               <reg 42>,
                                                                                                                                                                                               <reg 43>,
                                                                                                                                                                                               <reg 44>,
                                                                                                                                                                                               <reg 45>,
                                                                                                                                                                                               <reg 46>,
                                                                                                                                                                                               <reg 47>,
                                                                                                                                                                                               <reg 48>,
                                                                                                                                                                                               <reg 49>,
                                                                                                                                                                                               <reg 50>,
                                                                                                                                                                                               <reg 51>,
                                                                                                                                                                                               <reg 52>,
                                                                                                                                                                                               <reg 53>,
                                                                                                                                                                                               <reg 54>,
                                                                                                                                                                                               <reg 55>,
                                                                                                                                                                                               <reg 56>,
                                                                                                                                                                                               <reg 57>,
                                                                                                                                                                                               <reg 58>,
                                                                                                                                                                                               <reg 59>,
                                                                                                                                                                                               <reg 60>,
                                                                                                                                                                                               <reg 61>,
                                                                                                                                                                                               <reg 62>,
                                                                                                                                                                                               <reg 63>,
                                                                                                                                                                                               <reg 64>,
                                                                                                                                                                                               <reg 65>,
                                                                                                                                                                                               <reg 66>,
                                                                                                                                                                                               <reg 67>,
                                                                                                                                                                                               <reg 68>,
                                                                                                                                                                                               <reg 69>,
                                                                                                                                                                                               <reg 70>,
                                                                                                                                                                                               <reg 71>,
                                                                                                                                                                                               <reg 72>,
                                                                                                                                                                                               <reg 73>,
                                                                                                                                                                                               <reg 74>,
                                                                                                                                                                                               <reg 75>,
                                                                                                                                                                                               <reg 76>,
                                                                                                                                                                                               <reg 77>,
                                                                                                                                                                                               <reg 78>,
                                                                                                                                                                                               <reg 79>,
                                                                                                                                                                                               <reg 80>,
                                                                                                                                                                                               <reg 81>,
                                                                                                                                                                                               <reg 82>,
                                                                                                                                                                                               <reg 83>,
                                                                                                                                                                                               <reg 84>,
                                                                                                                                                                                               <reg 85>,
                                                                                                                                                                                               <reg 86>,
                                                                                                                                                                                               <reg 87>,
                                                                                                                                                                                               <reg 88>,
                                                                                                                                                                                               <reg 89>,
                                                                                                                                                                                               <reg 90>,
                                                                                                                                                                                               <reg 91>,
                                                                                                                                                                                               <reg 92>,
                                                                                                                                                                                               <reg 93>,
                                                                                                                                                                                               <reg 94>,
                                                                                                                                                                                               <reg 95>,
                                                                                                                                                                                               <reg 96>,
                                                                                                                                                                                               <reg 97>,
                                                                                                                                                                                               <reg 98>,
                                                                                                                                                                                               <reg 99>,
                                                                                                                                                                                               <reg 100>,
                                                                                                                                                                                               <reg 101>,
                                                                                                                                                                                               <reg 102>,
                                                                                                                                                                                               <reg 103>,
                                                                                                                                                                                               <reg 104>,
                                                                                                                                                                                               <reg 105>,
                                                                                                                                                                                               <reg 106>,
                                                                                                                                                                                               <reg 107>,
                                                                                                                                                                                               <reg 108>,
                                                                                                                                                                                               <reg 109>,
                                                                                                                                                                                               <reg 110>,
                                                                                                                                                                                               <reg 111>,
                                                                                                                                                                                               <reg 112>,
                                                                                                                                                                                               <reg 113>,
                                                                                                                                                                                               <reg 114>,
                                                                                                                                                                                               <reg 115>,
                                                                                                                                                                                               <reg 116>,
                                                                                                                                                                                               <reg 117>,
                                                                                                                                                                                               <reg 118>,
                                                                                                                                                                                               <reg 119>,
                                                                                                                                                                                               <reg 120>,
                                                                                                                                                                                               <reg 121>,
                                                                                                                                                                                               <reg 122>,
                                                                                                                                                                                               <reg 123>,
                                                                                                                                                                                               <reg 124>,
                                                                                                                                                                                               <reg 125>,
                                                                                                                                                                                               <reg 126>,
                                                                                                                                                                                               <reg 127>,
                                                                                                                                                                                               <reg 128>,
                                                                                                                                                                                               <reg 129>,
                                                                                                                                                                                               <reg 130>,
                                                                                                                                                                                               <reg 131>,
                                                                                                                                                                                               <reg 132>,
                                                                                                                                                                                               <reg 133>,
                                                                                                                                                                                               <reg 134>,
                                                                                                                                                                                               <reg 135>,
                                                                                                                                                                                               <reg 136>,
                                                                                                                                                                                               <reg 137>,
                                                                                                                                                                                               <reg 138>,
                                                                                                                                                                                               <reg 139>,
                                                                                                                                                                                               <reg 140>,
                                                                                                                                                                                               <reg 141>,
                                                                                                                                                                                               <reg 142>,
                                                                                                                                                                                               <reg 143>,
                                                                                                                                                                                               <reg 144>,
                                                                                                                                                                                               <reg 145>,
                                                                                                                                                                                               <reg 146>,
                                                                                                                                                                                               <reg 147>,
                                                                                                                                                                                               <reg 148>,
                                                                                                                                                                                               <reg 149>,
                                                                                                                                                                                               <reg 150>,
                                                                                                                                                                                               <reg 151>,
                                                                                                                                                                                               <reg 152>,
                                                                                                                                                                                               <reg 153>,
                                                                                                                                                                                               <reg 154>,
                                                                                                                                                                                               <reg 155>,
                                                                                                                                                                                               <reg 156>,
                                                                                                                                                                                               <reg 157>,
                                                                                                                                                                                               <reg 158>,
                                                                                                                                                                                               <reg 159>,
                                                                                                                                                                                               <reg 160>,
                                                                                                                                                                                               <reg 161>,
                                                                                                                                                                                               <reg 162>,
                                                                                                                                                                                               <reg 163>,
                                                                                                                                                                                               <reg 164>,
                                                                                                                                                                                               <reg 165>,
                                                                                                                                                                                               <reg 166>,
                                                                                                                                                                                               <reg 167>,
                                                                                                                                                                                               <reg 168>,
                                                                                                                                                                                               <reg 169>,
                                                                                                                                                                                               <reg 170>,
                                                                                                                                                                                               <reg 171>,
                                                                                                                                                                                               <reg 172>,
                                                                                                                                                                                               <reg 173>,
                                                                                                                                                                                               <reg 174>,
                                                                                                                                                                                               <reg 175>,
                                                                                                                                                                                               <reg 176>,
                                                                                                                                                                                               <reg 177>,
                                                                                                                                                                                               <reg 178>,
                                                                                                                                                                                               <reg 179>,
                                                                                                                                                                                               <reg 180>,
                                                                                                                                                                                               <reg 181>,
                                                                                                                                                                                               <reg 182>,
                                                                                                                                                                                               <reg 183>,
                                                                                                                                                                                               <reg 184>,
                                                                                                                                                                                               <reg 185>,
                                                                                                                                                                                               <reg 186>,
                                                                                                                                                                                               <reg 187>,
                                                                                                                                                                                               <reg 188>,
                                                                                                                                                                                               <reg 189>,
                                                                                                                                                                                               <reg 190>,
                                                                                                                                                                                               <reg 191>,
                                                                                                                                                                                               <reg 192>,
                                                                                                                                                                                               <reg 193>,
                                                                                                                                                                                               <reg 194>,
                                                                                                                                                                                               <reg 195>,
                                                                                                                                                                                               <reg 196>,
                                                                                                                                                                                               <reg 197>,
                                                                                                                                                                                               <reg 198>,
                                                                                                                                                                                               <reg 199>,
                                                                                                                                                                                               <reg 200>,
                                                                                                                                                                                               <reg 201>,
                                                                                                                                                                                               <reg 202>,
                                                                                                                                                                                               <reg 203>,
                                                                                                                                                                                               <reg 204>,
                                                                                                                                                                                               <reg 205>,
                                                                                                                                                                                               <reg 206>,
                                                                                                                                                                                               <reg 207>,
                                                                                                                                                                                               <reg 208>,
                                                                                                                                                                                               <reg 209>,
                                                                                                                                                                                               <reg 210>,
                                                                                                                                                                                               <reg 211>,
                                                                                                                                                                                               <reg 212>,
                                                                                                                                                                                               <reg 213>,
                                                                                                                                                                                               <reg 214>,
                                                                                                                                                                                               <reg 215>,
                                                                                                                                                                                               <reg 216>,
                                                                                                                                                                                               <reg 217>,
                                                                                                                                                                                               <reg 218>,
                                                                                                                                                                                               <reg 219>,
                                                                                                                                                                                               <reg 220>,
                                                                                                                                                                                               <reg 221>,
                                                                                                                                                                                               <reg 222>,
                                                                                                                                                                                               <reg 223>,
                                                                                                                                                                                               <reg 224>,
                                                                                                                                                                                               <reg 225>,
                                                                                                                                                                                               <reg 226>,
                                                                                                                                                                                               <reg 227>,
                                                                                                                                                                                               <reg 228>,
                                                                                                                                                                                               <reg 229>,
                                                                                                                                                                                               <reg 230>,
                                                                                                                                                                                               <reg 231>,
                                                                                                                                                                                               <reg 232>,
                                                                                                                                                                                               <reg 233>,
                                                                                                                                                                                               <reg 234>,
                                                                                                                                                                                               <reg 235>,
                                                                                                                                                                                               <reg 236>,
                                                                                                                                                                                               <reg 237>,
                                                                                                                                                                                               <reg 238>,
                                                                                                                                                                                               <reg 239>,
                                                                                                                                                                                               <reg 240>,
                                                                                                                                                                                               <reg 241>,
                                                                                                                                                                                               <reg 242>,
                                                                                                                                                                                               <reg 243>,
                                                                                                                                                                                               <reg 244>,
                                                                                                                                                                                               <reg 245>,
                                                                                                                                                                                               <reg 246>,
                                                                                                                                                                                               <reg 247>,
                                                                                                                                                                                               <reg 248>,
                                                                                                                                                                                               <reg 249>,
                                                                                                                                                                                               <reg 250>,
                                                                                                                                                                                               <reg 251>,
                                                                                                                                                                                               <reg 252>,
                                                                                                                                                                                               <reg 253>,
                                                                                                                                                                                               <reg 254>,
                                                                                                                                                                                               <reg 255>,
                                                                                                                                                                                               <reg 256>,
                                                                                                                                                                                               <reg 257>))
                                                                                                                                                                                  
                                                                                                                                                                                  Regions details

                                                                                                                                                                                  No group selected.

                                                                                                                                                                                  • Concrete regions are numbered
                                                                                                                                                                                  • Unnumbered regions are groups whose children share a particular constraint
                                                                                                                                                                                  • Click on a region to view its details
                                                                                                                                                                                  • Double click on a region to zoom in on it
                                                                                                                                                                                  • Shift+double click to zoom out
                                                                                                                                                                                  • Hit escape to reset back to the top
                                                                                                                                                                                  decomp of (implied_uncross_side sd, s_id, s, m
                                                                                                                                                                                  Reg_idConstraintsInvariant
                                                                                                                                                                                  257
                                                                                                                                                                                  • (uncross_book
                                                                                                                                                                                     (insert_order
                                                                                                                                                                                      {calc_implied_strat_order s_id s
                                                                                                                                                                                       {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                        book3 = get_book_tops m.out_book3}
                                                                                                                                                                                       sd m.curr_time
                                                                                                                                                                                      with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                     [] 0).uncrossed_qty
                                                                                                                                                                                    = 0
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  m
                                                                                                                                                                                  256
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- s.leg1.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- s.leg2.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- s.leg3.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  255
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  254
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- s.leg1.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- s.leg2.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- s.leg3.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  253
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  252
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  251
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  250
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  249
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  248
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- s.leg1.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- s.leg2.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- s.leg3.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  247
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  246
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- s.leg1.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- s.leg2.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- s.leg3.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  245
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  244
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  243
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  242
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  241
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  240
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  239
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  238
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  237
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  236
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- s.leg3.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  235
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_6.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  234
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- s.leg3.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  233
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_6.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  232
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  231
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  230
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  229
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  228
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- s.leg3.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  227
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_6.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  226
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- s.leg3.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  225
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_6.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  224
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- s.leg1.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- s.leg2.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- s.leg3.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  223
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  222
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- s.leg1.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- s.leg2.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- s.leg3.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  221
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  220
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  219
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  218
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  217
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  216
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- s.leg1.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- s.leg2.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- s.leg3.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  215
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  214
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- s.leg1.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- s.leg2.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- s.leg3.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  213
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  212
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  211
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  210
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  209
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  208
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  207
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  206
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  205
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  204
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- s.leg3.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  203
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_6.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  202
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- s.leg3.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  201
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_6.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  200
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  199
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  198
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  197
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  196
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- s.leg3.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  195
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_6.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  194
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- s.leg3.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  193
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_6.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  192
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- (~- s.leg1.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- (~- s.leg2.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- (~- s.leg3.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  191
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  190
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- (~- s.leg1.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- (~- s.leg2.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- (~- s.leg3.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  189
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  188
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  187
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  186
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  185
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  184
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- (~- s.leg1.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- (~- s.leg2.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- (~- s.leg3.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  183
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  182
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- (~- s.leg1.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- (~- s.leg2.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- (~- s.leg3.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  181
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  180
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  179
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  178
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  177
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  176
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  175
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  174
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  173
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  172
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- (~- s.leg3.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  171
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_6.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  170
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- (~- s.leg3.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  169
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_6.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  168
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  167
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  166
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  165
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  164
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- (~- s.leg3.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  163
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_6.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  162
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- (~- s.leg3.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  161
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_6.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  160
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- (~- s.leg1.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- (~- s.leg2.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- (~- s.leg3.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  159
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  158
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- (~- s.leg1.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- (~- s.leg2.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- (~- s.leg3.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  157
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  156
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  155
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  154
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  153
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  152
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- (~- s.leg1.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- (~- s.leg2.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- (~- s.leg3.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  151
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  150
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- (~- s.leg1.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- (~- s.leg2.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- (~- s.leg3.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  149
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  148
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  147
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  146
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  145
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  144
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  143
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  142
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  141
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  140
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- (~- s.leg3.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  139
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_6.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  138
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- (~- s.leg3.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  137
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_6.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  136
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  135
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  134
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  133
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  132
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- (~- s.leg3.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  131
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_6.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  130
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- (~- s.leg3.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  129
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book1)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • s_id = STRAT1
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book1)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_6.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book1 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  128
                                                                                                                                                                                  • (uncross_book
                                                                                                                                                                                     (insert_order
                                                                                                                                                                                      {calc_implied_strat_order s_id s
                                                                                                                                                                                       {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                        book3 = get_book_tops m.out_book3}
                                                                                                                                                                                       sd m.curr_time
                                                                                                                                                                                      with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                     [] 0).uncrossed_qty
                                                                                                                                                                                    = 0
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  m
                                                                                                                                                                                  127
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- s.leg1.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- s.leg2.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- s.leg3.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  126
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  125
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- s.leg1.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- s.leg2.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- s.leg3.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  124
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  123
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  122
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  121
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  120
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  119
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- s.leg1.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- s.leg2.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- s.leg3.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  118
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  117
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- s.leg1.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- s.leg2.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- s.leg3.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  116
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  115
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  114
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  113
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  112
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  111
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  110
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  109
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  108
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  107
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- s.leg3.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  106
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_6.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  105
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- s.leg3.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  104
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_6.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  103
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  102
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  101
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  100
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  99
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- s.leg3.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  98
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_6.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  97
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- s.leg3.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  96
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- s.leg1.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_6.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  95
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- s.leg1.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- s.leg2.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- s.leg3.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  94
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  93
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- s.leg1.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- s.leg2.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- s.leg3.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  92
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  91
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  90
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  89
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  88
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  87
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- s.leg1.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- s.leg2.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- s.leg3.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  86
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  85
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- s.leg1.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- s.leg2.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- s.leg3.leg_mult) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  84
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  83
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  82
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  81
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  80
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  79
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  78
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  77
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  76
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  75
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- s.leg3.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  74
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_6.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  73
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- s.leg3.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  72
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- s.leg2.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_6.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  71
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  70
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  69
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- s.leg2.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- s.leg3.leg_mult) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  68
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  67
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- s.leg3.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  66
                                                                                                                                                                                  • (~- s.leg3.leg_mult) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_6.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  65
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- s.leg3.leg_mult) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  64
                                                                                                                                                                                  • not ((~- s.leg3.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- s.leg2.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- s.leg1.leg_mult) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • sd = BUY
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- s.leg1.leg_mult)
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- s.leg2.leg_mult)
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- s.leg3.leg_mult)
                                                                                                                                                                                        (Option.get _x_6.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  63
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- (~- s.leg1.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- (~- s.leg2.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- (~- s.leg3.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  62
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  61
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- (~- s.leg1.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- (~- s.leg2.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- (~- s.leg3.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  60
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  59
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  58
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  57
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  56
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  55
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- (~- s.leg1.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- (~- s.leg2.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- (~- s.leg3.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  54
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  53
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- (~- s.leg1.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- (~- s.leg2.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- (~- s.leg3.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  52
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  51
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  50
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  49
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  48
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  47
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  46
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  45
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  44
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  43
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- (~- s.leg3.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  42
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_6.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  41
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- (~- s.leg3.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  40
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_6.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  39
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  38
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  37
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  36
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  35
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- (~- s.leg3.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  34
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_6.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  33
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- (~- s.leg3.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  32
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg1.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).ask_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_6.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  31
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- (~- s.leg1.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- (~- s.leg2.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- (~- s.leg3.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  30
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  29
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- (~- s.leg1.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- (~- s.leg2.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- (~- s.leg3.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  28
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  27
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  26
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  25
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  24
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  23
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- (~- s.leg1.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- (~- s.leg2.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- (~- s.leg3.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  22
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  21
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_5 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2;
                                                                                                                                                                                           book3 = get_book_tops _x_3}
                                                                                                                                                                                          sd _x_4
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_6 : int) = _x_5.uncrossed_qty in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_6 * ~- (~- s.leg1.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_6 * ~- (~- s.leg2.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_6 * ~- (~- s.leg3.leg_mult)) 0 _x_4
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : book) = _x_5.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_7.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_8.uncrossed_book; out_book3 = _x_9.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_10.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_5.uncrossed_fills
                                                                                                                                                                                    (List.append _x_7.uncrossed_fills
                                                                                                                                                                                     (List.append _x_8.uncrossed_fills _x_9.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  20
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = get_book_tops _x_2; book3 = _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  19
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  18
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  17
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_7 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  16
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_3 : best_bid_ask) = get_book_tops _x_2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = get_book_tops _x_1; book2 = _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_2 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_3.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  15
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  14
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  13
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  12
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  11
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- (~- s.leg3.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  10
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_6.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  9
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- (~- s.leg3.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  8
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • (~- (~- s.leg2.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_6.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  7
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  6
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.ask_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  5
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_6 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = get_book_tops _x_4}
                                                                                                                                                                                          sd _x_5
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_7 : int) = _x_6.uncrossed_qty in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_7 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_7 * ~- (~- s.leg2.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_7 * ~- (~- s.leg3.leg_mult)) 0 _x_5
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : book) = _x_6.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_8.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_9.uncrossed_book; out_book3 = _x_10.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_11.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_6.uncrossed_fills
                                                                                                                                                                                    (List.append _x_8.uncrossed_fills
                                                                                                                                                                                     (List.append _x_9.uncrossed_fills _x_10.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  4
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_5 : best_bid_ask) = get_book_tops _x_4 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = get_book_tops _x_3; book3 = _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_4 (_x_8 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_5.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  3
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- (~- s.leg3.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  2
                                                                                                                                                                                  • (~- (~- s.leg3.leg_mult)) > 0
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).ask_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_6.ask_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  1
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_7 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = get_book_tops _x_5} sd _x_6
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_8 : int) = _x_7.uncrossed_qty in
                                                                                                                                                                                  let (_x_9 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_8 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_8 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_8 * ~- (~- s.leg3.leg_mult)) 0 _x_6
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : book) = _x_7.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_9.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_10.uncrossed_book; out_book3 = _x_11.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_12.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_7.uncrossed_fills
                                                                                                                                                                                    (List.append _x_9.uncrossed_fills
                                                                                                                                                                                     (List.append _x_10.uncrossed_fills _x_11.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}
                                                                                                                                                                                  0
                                                                                                                                                                                  • not ((~- (~- s.leg3.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book3).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg2.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book2).bid_info)
                                                                                                                                                                                  • not ((~- (~- s.leg1.leg_mult)) > 0)
                                                                                                                                                                                  • not Is_a(None, (get_book_tops m.out_book1).bid_info)
                                                                                                                                                                                  • not (sd = BUY)
                                                                                                                                                                                  • not
                                                                                                                                                                                    ((uncross_book
                                                                                                                                                                                      (insert_order
                                                                                                                                                                                       {calc_implied_strat_order s_id s
                                                                                                                                                                                        {book1 = get_book_tops m.out_book1; book2 = get_book_tops m.out_book2;
                                                                                                                                                                                         book3 = get_book_tops m.out_book3}
                                                                                                                                                                                        sd m.curr_time
                                                                                                                                                                                       with o_id = m.last_ord_id + 1} m.s_book2)
                                                                                                                                                                                      [] 0).uncrossed_qty
                                                                                                                                                                                     = 0)
                                                                                                                                                                                  • not (s_id = STRAT1)
                                                                                                                                                                                  let (_x_0 : int) = m.last_ord_id + 1 in
                                                                                                                                                                                  let (_x_1 : book) = m.out_book1 in
                                                                                                                                                                                  let (_x_2 : best_bid_ask) = get_book_tops _x_1 in
                                                                                                                                                                                  let (_x_3 : book) = m.out_book2 in
                                                                                                                                                                                  let (_x_4 : best_bid_ask) = get_book_tops _x_3 in
                                                                                                                                                                                  let (_x_5 : book) = m.out_book3 in
                                                                                                                                                                                  let (_x_6 : best_bid_ask) = get_book_tops _x_5 in
                                                                                                                                                                                  let (_x_7 : int) = m.curr_time in
                                                                                                                                                                                  let (_x_8 : uncross_res)
                                                                                                                                                                                      = uncross_book
                                                                                                                                                                                        (insert_order
                                                                                                                                                                                         {calc_implied_strat_order s_id s
                                                                                                                                                                                          {book1 = _x_2; book2 = _x_4; book3 = _x_6} sd _x_7
                                                                                                                                                                                         with o_id = _x_0} m.s_book2)
                                                                                                                                                                                        [] 0
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_9 : int) = _x_8.uncrossed_qty in
                                                                                                                                                                                  let (_x_10 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_1 (_x_9 * ~- (~- s.leg1.leg_mult))
                                                                                                                                                                                        (Option.get _x_2.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_11 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_3 (_x_9 * ~- (~- s.leg2.leg_mult))
                                                                                                                                                                                        (Option.get _x_4.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_12 : uncross_res)
                                                                                                                                                                                      = allocate_implied_fills _x_5 (_x_9 * ~- (~- s.leg3.leg_mult))
                                                                                                                                                                                        (Option.get _x_6.bid_info).li_price _x_7
                                                                                                                                                                                  in
                                                                                                                                                                                  let (_x_13 : book) = _x_8.uncrossed_book in
                                                                                                                                                                                  {m with
                                                                                                                                                                                  last_ord_id = _x_0; out_book1 = _x_10.uncrossed_book;
                                                                                                                                                                                  out_book2 = _x_11.uncrossed_book; out_book3 = _x_12.uncrossed_book;
                                                                                                                                                                                  s_book2 =
                                                                                                                                                                                  {b_buys = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_buys;
                                                                                                                                                                                   b_sells = rec_fun.remove_imp_orders.remove_imp_orders_side.0 _x_13.b_sells};
                                                                                                                                                                                  outbound_msgs =
                                                                                                                                                                                  List.append
                                                                                                                                                                                  (create_fill_msgs
                                                                                                                                                                                   (List.append _x_8.uncrossed_fills
                                                                                                                                                                                    (List.append _x_10.uncrossed_fills
                                                                                                                                                                                     (List.append _x_11.uncrossed_fills _x_12.uncrossed_fills))))
                                                                                                                                                                                  m.outbound_msgs}

                                                                                                                                                                                  3.6 Full book implied uncross

                                                                                                                                                                                  In [26]:
                                                                                                                                                                                  (* The implied uncross algorithm *)
                                                                                                                                                                                  let implied_uncross_books (s : strategy_id) (m : market) =
                                                                                                                                                                                    if s = STRAT1 then
                                                                                                                                                                                      begin
                                                                                                                                                                                        let m = implied_uncross_side BUY s m.strat1 m in
                                                                                                                                                                                        implied_uncross_side SELL s m.strat1 m
                                                                                                                                                                                      end
                                                                                                                                                                                    else
                                                                                                                                                                                      begin
                                                                                                                                                                                        let m = implied_uncross_side BUY s m.strat2 m in
                                                                                                                                                                                        implied_uncross_side SELL s m.strat2 m
                                                                                                                                                                                      end
                                                                                                                                                                                  
                                                                                                                                                                                  Out[26]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                  val implied_uncross_books :
                                                                                                                                                                                    strategy_id ->
                                                                                                                                                                                    market ->
                                                                                                                                                                                    market =
                                                                                                                                                                                    <fun>
                                                                                                                                                                                  

                                                                                                                                                                                  4. Global state transition functions functions

                                                                                                                                                                                  4.1 Insert order

                                                                                                                                                                                  In [27]:
                                                                                                                                                                                  (* Perform operation to create and insert a new order *)
                                                                                                                                                                                  let run_new_order (m : market) (no : new_ord_msg) =
                                                                                                                                                                                    let new_o_id = m.last_ord_id + 1 in
                                                                                                                                                                                    let o = {
                                                                                                                                                                                      o_id = new_o_id
                                                                                                                                                                                      ; o_qty = no.no_qty
                                                                                                                                                                                      ; o_price = no.no_price
                                                                                                                                                                                      ; o_time = m.curr_time
                                                                                                                                                                                      ; o_side = no.no_side
                                                                                                                                                                                      ; o_client_id = no.no_client_id
                                                                                                                                                                                      ; o_inst = no.no_inst_type
                                                                                                                                                                                      ; o_is_implied = false (* these are always outright *)
                                                                                                                                                                                    } in
                                                                                                                                                                                  
                                                                                                                                                                                    let m' =
                                                                                                                                                                                      match no.no_inst_type with
                                                                                                                                                                                      | Strategy STRAT1 -> { m with s_book1 = (insert_order o m.s_book1) }
                                                                                                                                                                                      | Strategy STRAT2 -> { m with s_book2 = (insert_order o m.s_book2) }
                                                                                                                                                                                      | Outright OUT1   -> { m with out_book1 = (insert_order o m.out_book1) }
                                                                                                                                                                                      | Outright OUT2   -> { m with out_book2 = (insert_order o m.out_book2) }
                                                                                                                                                                                      | Outright OUT3   -> { m with out_book3 = (insert_order o m.out_book3) }
                                                                                                                                                                                  
                                                                                                                                                                                    in { m' with last_ord_id = new_o_id }
                                                                                                                                                                                  
                                                                                                                                                                                  Out[27]:
                                                                                                                                                                                  val run_new_order : market -> new_ord_msg -> market = <fun>
                                                                                                                                                                                  

                                                                                                                                                                                  4.2 Cancel order

                                                                                                                                                                                  In [28]:
                                                                                                                                                                                  (* Cancel an order *)
                                                                                                                                                                                  let run_cancel_order (m : market) (co : cancel_ord_msg) =
                                                                                                                                                                                    match co.co_instrument with
                                                                                                                                                                                    | Strategy STRAT1 -> {m with s_book1 = (cancel_ord_book co m.s_book1)}
                                                                                                                                                                                    | Strategy STRAT2 -> {m with s_book2 = (cancel_ord_book co m.s_book2)}
                                                                                                                                                                                    | Outright OUT1 -> {m with out_book1 = (cancel_ord_book co m.out_book1)}
                                                                                                                                                                                    | Outright OUT2 -> {m with out_book2 = (cancel_ord_book co m.out_book2)}
                                                                                                                                                                                    | Outright OUT3 -> {m with out_book3 = (cancel_ord_book co m.out_book3)}
                                                                                                                                                                                  
                                                                                                                                                                                  Out[28]:
                                                                                                                                                                                  val run_cancel_order : market -> cancel_ord_msg -> market = <fun>
                                                                                                                                                                                  

                                                                                                                                                                                  4.3 Run implied uncross

                                                                                                                                                                                  In [29]:
                                                                                                                                                                                  (* Perform opreation to execute new fill *)
                                                                                                                                                                                  let run_implied_uncross (m : market) =
                                                                                                                                                                                  
                                                                                                                                                                                    (* Do the typical uncross between the strategies *)
                                                                                                                                                                                    let sbook1_res = uncross_book m.s_book1 [] 0 in
                                                                                                                                                                                    let sbook2_res = uncross_book m.s_book2 [] 0 in
                                                                                                                                                                                  
                                                                                                                                                                                    (*  outright books  *)
                                                                                                                                                                                    let obook1_res = uncross_book m.out_book1 [] 0 in
                                                                                                                                                                                    let obook2_res = uncross_book m.out_book2 [] 0 in
                                                                                                                                                                                    let obook3_res = uncross_book m.out_book3 [] 0 in
                                                                                                                                                                                  
                                                                                                                                                                                    (* Now let's update the entire market state *)
                                                                                                                                                                                    let m' = {
                                                                                                                                                                                      m with
                                                                                                                                                                                        s_book1 = sbook1_res.uncrossed_book
                                                                                                                                                                                        ; s_book2 = sbook2_res.uncrossed_book
                                                                                                                                                                                  
                                                                                                                                                                                        ; out_book1 = obook1_res.uncrossed_book
                                                                                                                                                                                        ; out_book2 = obook2_res.uncrossed_book
                                                                                                                                                                                        ; out_book3 = obook3_res.uncrossed_book
                                                                                                                                                                                  
                                                                                                                                                                                        ; outbound_msgs =
                                                                                                                                                                                            create_fill_msgs (
                                                                                                                                                                                              sbook1_res.uncrossed_fills @
                                                                                                                                                                                              sbook2_res.uncrossed_fills @
                                                                                                                                                                                              obook1_res.uncrossed_fills @
                                                                                                                                                                                              obook2_res.uncrossed_fills @
                                                                                                                                                                                              obook3_res.uncrossed_fills )
                                                                                                                                                                                    } in
                                                                                                                                                                                  
                                                                                                                                                                                    (* Now we should be done with uncrossing the books the old way,
                                                                                                                                                                                      let's now create implied orders here.
                                                                                                                                                                                      Notice that we're using the priority function to determine which
                                                                                                                                                                                      strategy order book runs first... *)
                                                                                                                                                                                    if priority_strat m'.strat1 m'.strat2 then
                                                                                                                                                                                      let m' = implied_uncross_books STRAT1 m' in
                                                                                                                                                                                      (implied_uncross_books STRAT2 m')
                                                                                                                                                                                    else
                                                                                                                                                                                      let m' = implied_uncross_books STRAT2 m' in
                                                                                                                                                                                      (implied_uncross_books STRAT1 m')
                                                                                                                                                                                  
                                                                                                                                                                                  ;;
                                                                                                                                                                                  
                                                                                                                                                                                  Out[29]:
                                                                                                                                                                                  val run_implied_uncross : market -> market = <fun>
                                                                                                                                                                                  
                                                                                                                                                                                  In [30]:
                                                                                                                                                                                  (* Now is a time for a full market uncross. *)
                                                                                                                                                                                  
                                                                                                                                                                                  let m2 = {
                                                                                                                                                                                    curr_time = 1
                                                                                                                                                                                  
                                                                                                                                                                                    ; last_ord_id = 0
                                                                                                                                                                                  
                                                                                                                                                                                    (* In a larger model, we can *)
                                                                                                                                                                                    (* first strategy is 2*x1 - x2 + x3 *)
                                                                                                                                                                                    ; strat1 = (make_strat 1 2 (-1) 1)
                                                                                                                                                                                    (* second strategy is just the 3rd outright security *)
                                                                                                                                                                                    ; strat2 = (make_strat 2 0 1 0)
                                                                                                                                                                                  
                                                                                                                                                                                    (* outright books *)
                                                                                                                                                                                    ; out_book1 = {
                                                                                                                                                                                      b_buys = [ (make BUY 500 50 1 (Outright OUT1) 1 false 1) ]
                                                                                                                                                                                      ; b_sells = [ (make SELL 750 55 2 (Outright OUT1) 1 false 1) ]
                                                                                                                                                                                    }
                                                                                                                                                                                  
                                                                                                                                                                                    ; out_book2 = {
                                                                                                                                                                                      b_buys = [ (make BUY 200 60 3 (Outright OUT1) 1 false 1) ]
                                                                                                                                                                                      ; b_sells = [ (make SELL 500 70 4 (Outright OUT1) 1 false 1) ]
                                                                                                                                                                                    }
                                                                                                                                                                                    ; out_book3 = empty_book
                                                                                                                                                                                  
                                                                                                                                                                                    (* Strategy books *)
                                                                                                                                                                                    ; s_book1 = empty_book
                                                                                                                                                                                    ; s_book2 = empty_book
                                                                                                                                                                                  
                                                                                                                                                                                    (* Inbound and outbound message queues *)
                                                                                                                                                                                    ; inbound_msgs = []
                                                                                                                                                                                    ; outbound_msgs = []
                                                                                                                                                                                  }
                                                                                                                                                                                  
                                                                                                                                                                                  Out[30]:
                                                                                                                                                                                  val m2 : market = <document>
                                                                                                                                                                                  
                                                                                                                                                                                  Strategy 1
                                                                                                                                                                                  BuysSells
                                                                                                                                                                                  Strategy 2
                                                                                                                                                                                  BuysSells
                                                                                                                                                                                  Book 1
                                                                                                                                                                                  BuysSells
                                                                                                                                                                                  50 (500)
                                                                                                                                                                                  55 (750)
                                                                                                                                                                                  Book 2
                                                                                                                                                                                  BuysSells
                                                                                                                                                                                  60 (200)
                                                                                                                                                                                  70 (500)
                                                                                                                                                                                  Book 3
                                                                                                                                                                                  BuysSells

                                                                                                                                                                                  4.4 Main transition function

                                                                                                                                                                                  This is where we put it all together. Note that this is a 'shortened' version of the full model - in a complete model we would allow new strategies to be created, more intricate state transitions (e.g. auctions) and much more.

                                                                                                                                                                                  In [31]:
                                                                                                                                                                                  (* The main state transition loop of the exchange state *)
                                                                                                                                                                                  let step (m : market) (msg : inbound_msg) =
                                                                                                                                                                                   begin
                                                                                                                                                                                    match msg with
                                                                                                                                                                                    | NewOrder no -> run_new_order m no
                                                                                                                                                                                    | CancelOrder co -> run_cancel_order m co
                                                                                                                                                                                    | ImpliedUncross -> run_implied_uncross m
                                                                                                                                                                                   end
                                                                                                                                                                                  ;;
                                                                                                                                                                                  
                                                                                                                                                                                  let rec run (m: market) (msgs : inbound_msg list) =
                                                                                                                                                                                   match msgs with
                                                                                                                                                                                   | [] -> []
                                                                                                                                                                                   | x::xs -> let m' = step m x in
                                                                                                                                                                                     m' :: (run m' xs)
                                                                                                                                                                                  ;;
                                                                                                                                                                                  
                                                                                                                                                                                  Out[31]:
                                                                                                                                                                                  val step : market -> inbound_msg -> market = <fun>
                                                                                                                                                                                  val run : market -> inbound_msg list -> market list = <fun>
                                                                                                                                                                                  
                                                                                                                                                                                  termination proof

                                                                                                                                                                                  Termination proof

                                                                                                                                                                                  call `run (step m (List.hd msgs)) (List.tl msgs)` from `run m msgs`
                                                                                                                                                                                  original:run m msgs
                                                                                                                                                                                  sub:run (step m (List.hd msgs)) (List.tl msgs)
                                                                                                                                                                                  original ordinal:Ordinal.Int (_cnt msgs)
                                                                                                                                                                                  sub ordinal:Ordinal.Int (_cnt (List.tl msgs))
                                                                                                                                                                                  path:[msgs <> []]
                                                                                                                                                                                  proof:
                                                                                                                                                                                  detailed proof
                                                                                                                                                                                  ground_instances:3
                                                                                                                                                                                  definitions:0
                                                                                                                                                                                  inductions:0
                                                                                                                                                                                  search_time:
                                                                                                                                                                                  0.230s
                                                                                                                                                                                  details:
                                                                                                                                                                                  Expand
                                                                                                                                                                                  smt_stats:
                                                                                                                                                                                  num checks:8
                                                                                                                                                                                  arith-assume-eqs:2
                                                                                                                                                                                  arith-make-feasible:78
                                                                                                                                                                                  arith-max-columns:63
                                                                                                                                                                                  arith-conflicts:9
                                                                                                                                                                                  rlimit count:77658316
                                                                                                                                                                                  arith-cheap-eqs:7
                                                                                                                                                                                  mk clause:164
                                                                                                                                                                                  datatype occurs check:22
                                                                                                                                                                                  mk bool var:549
                                                                                                                                                                                  arith-lower:86
                                                                                                                                                                                  arith-diseq:8
                                                                                                                                                                                  datatype splits:95
                                                                                                                                                                                  decisions:208
                                                                                                                                                                                  arith-propagations:9
                                                                                                                                                                                  propagations:198
                                                                                                                                                                                  interface eqs:2
                                                                                                                                                                                  arith-bound-propagations-cheap:9
                                                                                                                                                                                  arith-max-rows:27
                                                                                                                                                                                  conflicts:25
                                                                                                                                                                                  datatype accessor ax:74
                                                                                                                                                                                  minimized lits:3
                                                                                                                                                                                  arith-bound-propagations-lp:1
                                                                                                                                                                                  datatype constructor ax:119
                                                                                                                                                                                  final checks:6
                                                                                                                                                                                  added eqs:668
                                                                                                                                                                                  del clause:80
                                                                                                                                                                                  arith eq adapter:78
                                                                                                                                                                                  arith-upper:91
                                                                                                                                                                                  time:0.002000
                                                                                                                                                                                  memory:16.820000
                                                                                                                                                                                  max memory:36.090000
                                                                                                                                                                                  num allocs:584735144028.000000
                                                                                                                                                                                  Expand
                                                                                                                                                                                  • start[0.230s]
                                                                                                                                                                                      let (_x_0 : int) = count.list count.inbound_msg msgs in
                                                                                                                                                                                      let (_x_1 : inbound_msg list) = List.tl msgs in
                                                                                                                                                                                      let (_x_2 : int) = count.list count.inbound_msg _x_1 in
                                                                                                                                                                                      msgs <> [] && _x_0 >= 0 && _x_2 >= 0
                                                                                                                                                                                      ==> not (_x_1 <> [])
                                                                                                                                                                                          || Ordinal.( << ) (Ordinal.Int _x_2) (Ordinal.Int _x_0)
                                                                                                                                                                                  • simplify
                                                                                                                                                                                    into:
                                                                                                                                                                                    let (_x_0 : int) = count.list count.inbound_msg msgs in
                                                                                                                                                                                    let (_x_1 : inbound_msg list) = List.tl msgs in
                                                                                                                                                                                    let (_x_2 : int) = count.list count.inbound_msg _x_1 in
                                                                                                                                                                                    (not ((msgs <> [] && _x_0 >= 0) && _x_2 >= 0) || not (_x_1 <> []))
                                                                                                                                                                                    || Ordinal.( << ) (Ordinal.Int _x_2) (Ordinal.Int _x_0)
                                                                                                                                                                                    expansions:
                                                                                                                                                                                    []
                                                                                                                                                                                    rewrite_steps:
                                                                                                                                                                                      forward_chaining:
                                                                                                                                                                                      • unroll
                                                                                                                                                                                        expr:
                                                                                                                                                                                        (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: inbound_msg -> int) count.inb…
                                                                                                                                                                                        expansions:
                                                                                                                                                                                        • unroll
                                                                                                                                                                                          expr:
                                                                                                                                                                                          (|Ordinal.<<_129/client|
                                                                                                                                                                                            (|Ordinal.Int_114/client|
                                                                                                                                                                                              (|`count.list { Resolved_term.spec_idx = 0;…
                                                                                                                                                                                          expansions:
                                                                                                                                                                                          • unroll
                                                                                                                                                                                            expr:
                                                                                                                                                                                            (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: inbound_msg -> int) count.inb…
                                                                                                                                                                                            expansions:
                                                                                                                                                                                            • Unsat

                                                                                                                                                                                            5. Complete examples

                                                                                                                                                                                            Now let's have a complete example that shows how to insert and then trade outright and strategy orders

                                                                                                                                                                                            In [32]:
                                                                                                                                                                                            let m4 = {
                                                                                                                                                                                            
                                                                                                                                                                                              curr_time = 1
                                                                                                                                                                                            
                                                                                                                                                                                              ; last_ord_id = 0
                                                                                                                                                                                            
                                                                                                                                                                                              (* first strategy is 2*x1 - x2 + x3 *)
                                                                                                                                                                                              ; strat1 = (make_strat 1 2 (-1) 1)
                                                                                                                                                                                              (* second strategy is just the 3rd outright security *)
                                                                                                                                                                                              ; strat2 = (make_strat 2 0 0 1)
                                                                                                                                                                                            
                                                                                                                                                                                              (* outright books *)
                                                                                                                                                                                              ; out_book1 = empty_book
                                                                                                                                                                                              ; out_book2 = empty_book
                                                                                                                                                                                              ; out_book3 = empty_book
                                                                                                                                                                                            
                                                                                                                                                                                              (* Strategy books *)
                                                                                                                                                                                              ; s_book1 = empty_book
                                                                                                                                                                                              ; s_book2 = empty_book
                                                                                                                                                                                            
                                                                                                                                                                                              (* Inbound and outbound message queues *)
                                                                                                                                                                                              ; inbound_msgs = []
                                                                                                                                                                                              ; outbound_msgs = []
                                                                                                                                                                                            } in
                                                                                                                                                                                            
                                                                                                                                                                                            (* Helper function signature is: 'cid inst qty sd p'*)
                                                                                                                                                                                            let new_ord1_msg = make_no_msg 1 (Outright OUT1) 100 SELL 75 in
                                                                                                                                                                                            let new_ord2_msg = make_no_msg 2 (Outright OUT1) 75 BUY 80 in
                                                                                                                                                                                            let new_ord3_msg = make_no_msg 3 (Outright OUT1) 125 SELL 50 in
                                                                                                                                                                                            
                                                                                                                                                                                            run m4 [new_ord1_msg; new_ord2_msg; new_ord3_msg];;
                                                                                                                                                                                            
                                                                                                                                                                                            Out[32]:
                                                                                                                                                                                            - : market list = [<document>;<document>;<document>]
                                                                                                                                                                                            
                                                                                                                                                                                            Strategy 1
                                                                                                                                                                                            BuysSells
                                                                                                                                                                                            Strategy 2
                                                                                                                                                                                            BuysSells
                                                                                                                                                                                            Book 1
                                                                                                                                                                                            BuysSells
                                                                                                                                                                                            -
                                                                                                                                                                                            75 (100)
                                                                                                                                                                                            Book 2
                                                                                                                                                                                            BuysSells
                                                                                                                                                                                            Book 3
                                                                                                                                                                                            BuysSells
                                                                                                                                                                                            Strategy 1
                                                                                                                                                                                            BuysSells
                                                                                                                                                                                            Strategy 2
                                                                                                                                                                                            BuysSells
                                                                                                                                                                                            Book 1
                                                                                                                                                                                            BuysSells
                                                                                                                                                                                            80 (75)
                                                                                                                                                                                            75 (100)
                                                                                                                                                                                            Book 2
                                                                                                                                                                                            BuysSells
                                                                                                                                                                                            Book 3
                                                                                                                                                                                            BuysSells
                                                                                                                                                                                            Strategy 1
                                                                                                                                                                                            BuysSells
                                                                                                                                                                                            Strategy 2
                                                                                                                                                                                            BuysSells
                                                                                                                                                                                            Book 1
                                                                                                                                                                                            BuysSells
                                                                                                                                                                                            80 (75)
                                                                                                                                                                                            50 (125)
                                                                                                                                                                                            -
                                                                                                                                                                                            75 (100)
                                                                                                                                                                                            Book 2
                                                                                                                                                                                            BuysSells
                                                                                                                                                                                            Book 3
                                                                                                                                                                                            BuysSells